当前位置:  建站>运营/SEO
本页文章导读:
    ▪[nagios监控] centos6.2安装配置nagios server      1> 安装软件包       yum install  httpd gcc glibc glibc-common php  gd  gd-devel libpng  libmng libjpeg zlib -y       yum install openssl openssl-devel -y 2> 配置php环境     &nbs.........
    ▪[nagios监控] 监控samba服务      监控samba服务 1> 监控端设置       a> 下载监控脚本             cd /usr/local/nagios/libexec/             wget ftp://192.168.68.254/monitor/nagios/scripts/ch.........
    ▪特殊按键--休眠键驱动      这是一个关于休眠和关机的按键驱动。板子:pxa31X系列  内核:2.6.25 这个驱动用到了内核文件操作,内核线程,等待队列,异步通知,并介绍了一种调试驱动的方法。 #include <linux/init.h&g.........

[1][nagios监控] centos6.2安装配置nagios server
    来源: 互联网  发布时间: 2013-10-26
1> 安装软件包
      yum install  httpd gcc glibc glibc-common php  gd  gd-devel libpng  libmng libjpeg zlib -y
      yum install openssl openssl-devel -y
2> 配置php环境
      vim /etc/httpd/conf/httpd.conf 
         276 ServerName localhost:80
3> 创建nagios帐号
      useradd  nagios
      groupadd nagcmd
      usermod -G nagcmd  nagios
      usermod -G nagcmd  apache  
4> 安装nagios-3.4.1
      a> 下载软件包,解压编译
            wget ftp://192.168.68.254/monitor/nagios/nagios-3.4.1.tar.gz
            tar -zxvf nagios-3.4.1.tar.gz 
            cd nagios
            ./configure --with-command-group=nagcmd
            make all && make install 
            make install-init && make install-config && make install-commandmode && make install-webconf
      b> 创建用户用于Nagios的WEB接口登录,重启httpd使配置生效    
            htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
            service httpd restart
5> 编译并安装Nagios插件
      wget ftp://192.168.68.254/monitor/nagios/nagios-plugins-1.4.16.tar.gz
      tar -zxvf nagios-plugins-1.4.16.tar.gz 
      cd nagios-plugins-1.4.16
      ./configure --with-nagios-user=nagios --with-nagios-group=nagcmd
      make && make install
6> 验证nagios样例配置文件
      /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
7> 启动nagios服务
      service nagios start
      service httpd start
作者:kakane 发表于2013-3-12 11:41:56 原文链接
阅读:69 评论:0 查看评论

    
[2][nagios监控] 监控samba服务
    来源: 互联网  发布时间: 2013-10-26
监控samba服务

1> 监控端设置
      a> 下载监控脚本
            cd /usr/local/nagios/libexec/
            wget ftp://192.168.68.254/monitor/nagios/scripts/check_smb
            chmod +x check_smb
      b> 添加服务命令
            vim /usr/local/nagios/etc/objects/commands.cfg
               # 'check_smb' command definition
               define command{
                           command_name  check_smb
                           command_line  $USER1$/check_smb -H $HOSTADDRESS$
               } 
      c> 添加监控主机
           vim /usr/local/nagios/etc/objects/192.168.68.214.cfg
               # Define a service to check SMB on the local machine.
               define service{
                            use                             generic-service
                            host_name                       test-samba
                            service_description             Samba
                            check_command                   check_smb
                            process_perf_data               1
               }
作者:kakane 发表于2013-3-12 13:44:55 原文链接
阅读:88 评论:0 查看评论

    
[3]特殊按键--休眠键驱动
    来源: 互联网  发布时间: 2013-10-26
这是一个关于休眠和关机的按键驱动。板子:pxa31X系列  内核:2.6.25
这个驱动用到了内核文件操作,内核线程,等待队列,异步通知,并介绍了一种调试驱动的方法。
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/syscalls.h>
#include <linux/unistd.h>
#include <linux/miscdevice.h>
#include <linux/platform_device.h>
#include <linux/uaccess.h>
#include <linux/string.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/pxa3xx-regs.h>
#include <asm/arch/mfp-pxa300.h>
#include <asm/arch/gpio.h>
#include <asm/uaccess.h>    //用于内核线程
#include <linux/irq.h> 
#include <linux/interrupt.h>
#include <linux/ioctl.h>
#include <linux/sched.h>
#include <linux/kthread.h>
#include <linux/errno.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include <linux/wait.h>
#include <asm/semaphore.h>

#include "pmb.h"

#define PB_DEVICE_NAME "william_pmb"            

//#define DEBUG
#ifdef DEBUG
	#define pr_debug(fmt, arg...) printk(KERN_DEBUG fmt, ##arg)
#else
	#define pr_debug(fmt, arg...) printk(KERN_INFO fmt, ##arg)
#endif
/*
用于调试驱动的一种方法。
其中printk函数中的参数,定义于<linux/kernel.h>。
#define	KERN_EMERG	"<0>"	/* system is unusable紧急事件消息,系统崩溃前提示,表示系统不可用*/
#define	KERN_ALERT	"<1>"	/* action must be taken immediately	报告消息,表示必须马上采取措施*/
#define	KERN_CRIT	"<2>"	/* critical conditions临界情况,通常用于涉及严重的硬件或软件操作失败*/
#define	KERN_ERR	"<3>"	/* error conditions错误情况,驱动程序常用来报告硬件错误*/
#define	KERN_WARNING	"<4>"	/* warning conditions警告,对可能出现问题的情况进行警告*/
#define	KERN_NOTICE	"<5>"	/* normal but significant condition正常但又重要的情况,常用于提醒与安全相关的消息*/
#define	KERN_INFO	"<6>"	/* informational提示信息*/
#define	KERN_DEBUG	"<7>"	/* debug-level messages调试级别消息*/
*/

/*硬件上的一些定义*/
#define PECR_E0IS	(1 << 29)	// EXT_WAKEUP<0> Interrupt Status
#define PECR_E0IE	(1 << 28)	// EXT_WAKEUP<0> Pin Interrupt Enable
#define PECR_DIR0(1 << 4)	//Direction for EXT_WAKEUP<0>: 0/1= input/output
#define PECR_IVE0	(1 << 0)	//Input Value for EXT_WAKEUP<0>

//Currently we have
#define IRQ_WAKEUP0	PXA_IRQ(49)	/* EXT_WAKEUP0 */
#define IRQ_WAKEUP1	PXA_IRQ(50)	/* EXT_WAKEUP1 */

//一个重要的全局结构体
static struct powerkey_t pwk;
/*
struct powerkey_t 
{	
	int ifopen;	    //check if device is opened
	unsigned int pressed;	    //current key state		[0/1=release/press]
	int event;	//event:	    [0/1/2/3=narmal/sleep/deepsleep/wakeup]
	wait_queue_head_t keywaitq;	    //powerkey queue
	struct tast_struct *p_thread;
	int checkforsleep;	    //check if which event for sleep
	int ifhandshake;	    //check if need to handshake with app[]
	int handshake;
	struct fasync_struct *pwrkey_async_queue;
	int ifreleasehandshakecnt;	    //0: you can release handshake. >0: can't release handshake	
};
*/

static int pb_handshake(int sig,int mode);

static int wakeup_init(void)
{	
	PECR |= PECR_E0IE;	//enable wakeup0 interrupt
	PECR &= ~PECR_DIR0;	//as input
	return 0;
}

static int disable_wakeup(void)
{	
	PECR &= ~PECR_E0IE;	//disable wakeup0 interrupt
	return 0;
}

static int wakeup_ack_irq(void)
{	
	PECR |= PECR_E0IS;	//interrupt state, write 1 to clear
	return 0;
}


static int pb_sleep_exe(int sleep)
{
	int ret;
	struct file *fd;
	mm_segment_t old_fs;
	//printk("%s\n",__FUNCTION__);
	
	fd = filp_open("sys/power/state",O_RDWR,0);
	if(IS_ERR(fd))
	{
		printk("Open sys/power/state fail,ret = %ld \n",IS_ERR(fd));
		return -1;
	}
	old_fs = get_fs();
	set_fs(KERNEL_DS);
	switch(sleep)
	{
		case SLEEP_EVENT:
			printk("sleep!\n");
			ret = fd->f_op->write(fd,"mem",3,&fd->f_pos);
			if(ret != 3)
			{
				printk("Write to sleep fail!\n");
			}
			//printk("sleep write ok!\n");
			break;
		case DEEPSLEEP_EVENT:
			ret = fd->f_op->write(fd,"deepsleep",9,&fd->f_pos);
			if(ret != 9)
			{
				printk("Write to deepsleep fail!\n");
			}
			break;
		default:
			break;
	}
	set_fs(old_fs);
	filp_close(fd ,NULL);
	
	return 0;
}
/*
内核文件操作
strcut file* filp_open(const char* filename, int open_mode, int mode);
该函数返回strcut file*结构指针,供后继函数操作使用,该返回值用IS_ERR()来检验其有效性。

操作之前先要定位
void set_fs(mm_segment_t fs);
该函数的作用是改变kernel对内存地址检查的处理方式,其实该函数的参数fs只有两个取值:USER_DS,KERNEL_DS,分别代表用户空间和内核空间
get_fs();    取得当前的设置
off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin)
offset是偏移量。
若origin是SEEK_SET(0),则将该文件的位移量设置为距文件开始处offset 个字节。
若origin是SEEK_CUR(1),则将该文件的位移量设置为其当前值加offset, offset可为正或负。
若origin是SEEK_END(2),则将该文件的位移量设置为文件长度加offset, offset可为正或负。

ret = fd->f_op->write(fd,"mem",3,&fd->f_pos);    文件读写函数

最后关闭文件 int filp_close(struct file*filp, fl_owner_t id);
*/

static int wait_wakeup_handshake(void)
{
	int ret;
	struct powerkey_t *ppwk = &pwk;

	//printk("%s\n",__FUNCTION__);
	ppwk->event = WAKEUP_EVENT;
	if(ppwk->ifopen > NOOPENED)	
	{
		if(ppwk->ifhandshake == REQUESTHANDSHAKE)	
		{
			if(pb_handshake(SIGIO,POLL_IN))
			{
				printk("Posting Handshake fail\n");
				return -1;
			}
			else
			{
				ppwk->handshake = NONEEDHANDSHAKE;
				ret = wait_event_interruptible_timeout(ppwk->keywaitq, ppwk->handshake == HANDSHAKE_EVENT_OK, (20*HZ));
				if( ret == 0)
				{
					printk("Wake up handshake timeout\n");
				}
			}
		}
		else	
		{
			ppwk->handshake = NONEEDHANDSHAKE;
			ret = wait_event_interruptible_timeout(ppwk->keywaitq, ppwk->handshake == HANDSHAKE_EVENT_OK, (20*HZ));
			if( ret == 0)
			{
				printk("Wake up handshake timeout\n");
			}
		}
	}
	ppwk->handshake = NONEEDHANDSHAKE;
	
	return 0;
}


static irqreturn_t extwakeup_handle(int irq, void *dev_id)
{
	int readreg;
	struct powerkey_t *ppwk = &pwk;
	//printk("%s\n",__FUNCTION__);
	
	wakeup_ack_irq();
	
	readreg = PECR;		
	if(readreg & PECR_IVE0)
	{
		//printk("key is pressed !\n");
		ppwk->checkforsleep = NEEDCHECKSLEEP;
		ppwk->pressed = KEYPRESSED;	
	}
	else
	{
		//printk("key released!\n");
		ppwk->pressed = KEYRELEASE;
	}
	wake_up_interruptible(&ppwk->keywaitq);
	wakeup_ack_irq();
	return IRQ_HANDLED;
}


static int pb_irq_init(void)
{
	int err;
	//printk("%s\n",__FUNCTION__);

	err = request_irq(IRQ_WAKEUP0, &extwakeup_handle,NULL,
				  "ext_wakeup0_detect", NULL);
	
	return err;
}

static int preevent_sleep(const int sleepevent)
{
	int ret;
	struct powerkey_t *p = &pwk;
	
	if(sleepevent == DEEPSLEEP_EVENT)
	{
		if(p->ifopen > NOOPENED)	
			ret = wait_event_interruptible_timeout(p->keywaitq, p->pressed == KEYRELEASE, (3*HZ));
		disable_wakeup();
		wakeup_ack_irq();		
	}


	if(p->ifopen > NOOPENED)
	{
		p->handshake = NONEEDHANDSHAKE;
		ret = wait_event_interruptible_timeout(p->keywaitq, p->handshake == HANDSHAKE_EVENT_OK, (20*HZ));
		if( ret == 0)
		{
			printk("Handshake timeout\n");
		}
		p->handshake = NONEEDHANDSHAKE;
	}

	if(sleepevent == DEEPSLEEP_EVENT)
        {
		wakeup_init();
        wakeup_ack_irq();	
	}

	pb_sleep_exe(sleepevent);
	wait_wakeup_handshake();


	return 0;
}


static int wait_handshake_sleep(int sleepevent)
{
	int ret;
	struct powerkey_t *p = &pwk;
	
	p->event = sleepevent;
	if(p->ifhandshake == REQUESTHANDSHAKE)
	{	//for signal mode
		if(pb_handshake(SIGIO,POLL_IN))
		{
			printk("Posting Handshake fail\n");
			return -1;	
		}
		ret = preevent_sleep(sleepevent);
	}
	else	//for polling mode
	{
		ret = preevent_sleep(sleepevent);
	}
	
	return 0;
}
/*
wait_event_interruptible_timeout(queue, condition, timeout)
使用例如:
(1)初始化等待队列
int flags = 0;
wait_queue_head_t    select_wait;
init_waitqueue_head(&select_wait);
(2)等待事件的发生(条件满足)
{
...
    wait_event_interruptible_timeout(select_wait, flags != 0, HZ/10);
...
}
(3)唤醒等待队列
{
...
   if(waitqueue_active(&select_wait))
   {
       flags = 1;
       wake_up_interruptible( &nd->select_in_wait );
   }
...
}    
*/

static int driver_data_init(void)
{
	struct powerkey_t *ppwk = &pwk;
	
	if(PECR & PECR_IVE0)
	{
		ppwk->pressed = KEYPRESSED;
	}
	else
	{
		ppwk->pressed = KEYRELEASE;
	}
	ppwk->ifopen = NOOPENED;
	ppwk->event = NORMAL_EVENT;
	ppwk->handshake = NONEEDHANDSHAKE;
	ppwk->checkforsleep = NONEEDCHECKSLEEP;
	ppwk->ifhandshake = FREEHANDSHAKE;
	ppwk->ifreleasehandshakecnt = 0;
	init_waitqueue_head(&ppwk->keywaitq);
	return 0; 
}

static int powerkey_thread(void *data)
{
	struct powerkey_t *ppwk = &pwk;
	long ret;
//	unsigned long flags;

	//printk("%s\n",__FUNCTION__);
	
	while(!kthread_should_stop())
	{
		set_current_state(TASK_INTE      
    
最新技术文章:
▪SQVI和SAP查询QUERY的区别和使用注意事项    ▪彻底理解Cisco/Linux/Windows的IP路由    ▪Exchange 2010 处于禁止发送用户自动收到来自IT...
▪MB_CHANGE_DOCUMENT使用方法    ▪ALV的html表头    ▪【译】如何精确判断最终用户响应时间过长的...
▪apache2.4.4启用deflate压缩    ▪使用vmware 配置centos 6.0+ 网络出现的各种问题...    ▪十句话教你学会Linux数据流重定向
▪centos6.x已经安装的系统添加图形界面    ▪Linux查看CPU和内存使用情况    ▪win7问题解决,凭据管理器和无法访问,不允...
▪Dynamics CRM 2013 初体验(4):不再被支持的功...    ▪win7下制作ubuntu系统安装启动盘和U盘安装ubuntu...    ▪Linux cp -a用法
▪Windows Server时间服务器配置方法    ▪Tomcat+memcached实现Session共享    ▪Linux修改系统环境变量PATH路径的方法
▪Citrix 服务器虚拟化之二十七 XenApp6.5发布服务...    ▪搭建本地Ubuntu 镜像服务器    ▪Create local metadata resource of yum
▪tsm ANS0326E问题处理    ▪Windows SVN变化邮件通知(Python2.7实现)    ▪linux下的内核测试工具——perf使用简介
▪Nginx TCP Proxy模块的编译安装    ▪OSX: SSH密钥使用日记(2)    ▪OSX: SSH密钥使用日记(1)
▪Manually start and stop Oracle XE in Ubuntu    ▪Disable autostart of Oracle-xe in Ubuntu    ▪tar命令-linux
▪xtrabackup-2.1.2-611安装    ▪无废话ubuntu 13.4文件共享配置    ▪Unix文本处理工具之sed
▪hpux 操作系统 磁带备份与恢复    ▪HP DL360 G7通过iLO部署系统    ▪Redhat 6.0中VNC Server的配置方法
▪hpux 操作系统磁带备份与恢复    ▪用C++编程调用libvirt的API来创建KVM虚拟机    ▪hpux- hp小型机日常硬件故障处理case(一)
▪web集群时session同步的几种方法(统计)    ▪inux常用命令大全    ▪BAT 批处理实现循环备份N天文件夹
▪BIND9私有DNS服务器小环境搭建实验    ▪Exchange2013增量备份    ▪OSSEC Monitor your App log file
▪《深入理解Nginx》阅读与实践(三):使用upstre...    ▪如何给Fedora 15创建磁盘分区    ▪Packet Sniffer Code in C using sockets
▪Error, some other host already uses address    ▪修改uCOS_II以实现“优先级+时间片”联合调度    ▪weblogic开发模式与生产模式介绍
▪Wireshark 高级特性    ▪ubuntu13.04版本下安装RabbitVCS,类似windows的Tortoi...    ▪Apache 一台主机绑定多个域名及虚拟主机
▪linux安全设置    ▪RHEL双网卡绑定    ▪Linux shell if参数
▪Windows配置路由时可以指定源地址啦    ▪centos安装vim7.4    ▪S3C2410 实验三——块拷贝、字拷贝(寄存器的...
▪系统运维——日志处理    ▪ip_conntrack缓存neighbour    ▪关键在封装并发出了帧-IP冲突也无所谓
▪weblogic11g 安装——linux 无图形界面    ▪《数据通信与网络》笔记--SCTP    ▪《数据通信与网络》笔记--TCP中的拥塞控制
▪weblogic11g 安装集群 —— win2003 系统、单台主...    ▪weblogic11g 节点管理器 nodemanager    ▪Citrix 服务器虚拟化之二十六 应用程序虚拟化...
▪如何将windows下的文件夹挂载到linux虚拟机下    ▪在64位AIX6.1下安装SAP JCo    ▪Outlook启动时提示“找不到文件Outlook.pst文件”...
▪weblogic8.1 登陆5 ip 限制    ▪weblogic 内存 及 内存溢出    ▪手把手教你在Windows端搭建Redmine项目管理软件
▪启动及重新启动nginx,重启nginx后丢失nginx.pid问...    ▪Win7实现快速启动栏并实现靠左边的终极操作...    ▪《深入理解Nginx》阅读与实践(二):配置项...
▪显示grub引导菜单    ▪nagios监控主机    ▪linux各种数据流重定向
▪centOS安装chrome浏览器    ▪Slackware 14 安装完全指南    ▪SharePoint 2013的100个新功能之内容管理(三)
▪Citrix 服务器虚拟化之二十一 桌面虚拟化之部...    ▪[问,ask]ubuntu13.04安装vncserver后只显示桌面,不显...    ▪Win7中IIS出现“HTTP 错误 404.17 - Not Found 请求的...
▪CentOS快速安装最新版本的SaltStack    ▪CentOS 6.4 快速安装Nginx笔记    ▪磁盘管理——RAID 0
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3