linux文件检测

Linux制作服务进程

服务进程,系统启动时自动运行,可以使用systemctl命令进行启动/停止以及开机自启动功能等。

  1. 制作一个****.service 文件,文件内容有固定的格式,当我们使用systemctl进行控制时,会自动调用service 文件中的内容;
    格式:
    [Unit]
    Description=This my service //详情(在systemctl 控制时显示的服务详情)

[Service]
Type=simple //程序类型
ExecStart=/project/ceshi/5/MAIN start //执行 systemctl start 命令时候执行的语句(这里时执行了/project/ceshi/5/ 目录下 MAIN脚本 参数是start)
ExecStop=/project/ceshi/5/MAIN stop //执行 systemctl stop 命令时候执行的语句(这里时执行了/project/ceshi/5/ 目录下 MAIN脚本 参数是stop)
ExecReload=/project/ceshi/5/MAIN restart //服务重启时执行的语句(这里时执行了/project/ceshi/5/ 目录下 MAIN脚本 参数是restart)
RemainAfterExit=yes
Restart=no
SuccessExitStatus=2

[Install]
WantedBy=multi-user.target //此处表示所有用户可用

2.将service 文件放在/lib/systemd/system/ /etc/systemd/system 两个目录下/etc/systemd/system不放这个目录无法开机自启

  1. 在/project/ceshi/5/ 目录下 编写MAIN脚本,在脚本中编写启动/停止某个进程 。
    例:

#!/bin/bash

start()
{
/project/ceshi/5/main > dev/null 2>&1 &
}
stop()
{
Pkill main &
}
restart()
{
Stop
start
}

Case ”$1” in
start)
start
;;
stop)
stop
;;
reload)
restart
;;
force-reload)
force_reload
;;
*)
echo $”usage:” $0 {start|stop|restart}

esac
exit $?

例子:#include <stdio.h>
#include <sys/inotify.h> //inotify系列函数头文件
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h> //设置fd属性
#define DIR_LENGTH_MAX 4096 //文件路径名最大长度
#define SINGLE_READ_MAX 1024 //单次读取多少字节
char whole_name[DIR_LENGTH_MAX];
char recv_buf[SINGLE_READ_MAX];
size_t n_read = 0;
int read_len = 0;
char *p = NULL;
int unm;

void displayInotifyEvent(struct inotify_event *i)
{
char filestr[SINGLE_READ_MAX] = {“”};

if ((i->mask & IN_ACCESS)&&i->len > 0)          sprintf(filestr,"%s*** name =%s\r\n","IN_ACCESS ",i->name);
if ((i->mask & IN_ATTRIB)&&i->len > 0)          sprintf(filestr,"%s*** name =%s\r\n","IN_ATTRIB ",i->name);
if ((i->mask & IN_CLOSE_NOWRITE)&&i->len > 0)   sprintf(filestr,"%s*** name =%s\r\n","IN_CLOSE_NOWRITE ",i->name);
if ((i->mask & IN_CLOSE_WRITE)&&i->len > 0)     sprintf(filestr,"%s*** name =%s\r\n","IN_CLOSE_WRITE ",i->name);
if ((i->mask & IN_CREATE)&&i->len > 0)          sprintf(filestr,"%s*** name =%s\r\n","IN_CREATE ",i->name);
if ((i->mask & IN_DELETE)&&i->len > 0)          sprintf(filestr,"%s*** name =%s\r\n","IN_DELETE ",i->name);
if ((i->mask & IN_DELETE_SELF)&&i->len > 0)     sprintf(filestr,"%s*** name =%s\r\n","IN_DELETE_SELF ",i->name);
if ((i->mask & IN_IGNORED)&&i->len > 0)         sprintf(filestr,"%s*** name =%s\r\n","IN_IGNORED ",i->name);
if ((i->mask & IN_ISDIR)&&i->len > 0)           sprintf(filestr,"%s*** name =%s\r\n","IN_ISDIR ",i->name);
if ((i->mask & IN_MODIFY)&&i->len > 0)         sprintf(filestr,"%s*** name =%s\r\n","IN_MODIFY ",i->name);
if ((i->mask & IN_MOVE_SELF)&&i->len > 0)      sprintf(filestr,"%s*** name =%s\r\n","IN_MOVE_SELF ",i->name);
if ((i->mask & IN_MOVED_FROM)&&i->len > 0)      sprintf(filestr,"%s*** name =%s\r\n","IN_MOVED_FROM ",i->name);
if ((i->mask & IN_MOVED_TO)&&i->len > 0)        sprintf(filestr,"%s*** name =%s\r\n","IN_MOVED_TO ",i->name);
if ((i->mask & IN_OPEN)&&i->len > 0)          sprintf(filestr,"%s*** name =%s\r\n","IN_OPEN ",i->name);
if ((i->mask & IN_Q_OVERFLOW)&&i->len > 0)    sprintf(filestr,"%s*** name =%s\r\n","IN_Q_OVERFLOW ",i->name);
if ((i->mask & IN_UNMOUNT)&&i->len > 0)        sprintf(filestr,"%s*** name =%s\r\n","IN_UNMOUNT ",i->name);

write(unm,filestr,strlen(filestr));

}

Int main(int argc,char **argv)
{
//获取inotify文件描述符
int fd = inotify_init();
unm = open(“/project/ceshi/5/file.txt”, O_RDWR|O_CREAT, 0777);
const char *path2 = “/home/zhongfu/桌面/”;

int wd = inotify_add_watch(fd,path2,IN_ALL_EVENTS);
printf("***%d***\r\n",wd);

struct inotify_event *ev = NULL;
memset(recv_buf, 0, SINGLE_READ_MAX);
printf("***open***\r\n");
while (1)
{
    n_read = read(fd, recv_buf,sizeof(recv_buf)-1);
    if (n_read <= 0)
        continue;

    printf("Read %ld byte**.\r\n",(long)n_read);
    printf("**********************.\r\n");
    for( p = recv_buf; p<recv_buf+n_read; )
    {
        ev = (struct inotify_event *)p;
        displayInotifyEvent(ev);
        p += sizeof(struct inotify_event) + ev->len;
    }
    usleep(1000000);//睡眠1000ms
}


return 0;

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值