linux每隔秒往文件中写入,linux守护进程--定期向文件中插入log记录

要求:自己动手实现一个守护进程,当控制台窗口关闭时还可以在后台运行,每隔一秒钟向my.log文件中插入一条记录,记录格式如下:yyyy-mm-dd hh:mi:se 。

//makefile

.SUFFIXES: .c .o

CC=gcc

SRCS=mydaemon.c

OBJS=$(SRCS:.c=.o)

EXEC=mydaemon

all: $(OBJS)

$(CC) -o $(EXEC) $(OBJS)

@echo '-------------ok--------------'

.c.o:

$(CC) -g -o $@ -c $<

clean:

rm -f $(OBJS)

rm -f core*

//mydaemon.c

#include

#include

#include

#include

#include

#include

void writelog(const char *log)

{

time_t tDate;

struct tm *eventTime;

time(&tDate);//得到系统时间

eventTime = localtime(&tDate);//将时间格式化为struct tm结构

int iYear = eventTime->tm_year + 1900;

int iMon = eventTime->tm_mon + 1;

int iDay = eventTime->tm_mday;

int iHour = eventTime->tm_hour;

int iMin = eventTime->tm_min;

int iSec = eventTime->tm_sec;

char sDate[16];

sprintf(sDate, "%04d-%02d-%02d", iYear, iMon, iDay);

char sTime[16];

sprintf(sTime, "%02d:%02d:%02d", iHour, iMin, iSec);

char s[1024];

sprintf(s, "%s %s [%s]\n", sDate, sTime, log);//将s格式化为yyyy-mm-dd hh:mi:se [x]

FILE *fd = fopen("my.log", "a+");//以追加的方式打开文件

fputs(s, fd);//想log文件中写入一条数据

fclose(fd);//关闭文件

}

void setdaemon()

{

pid_t pid, sid;

pid = fork();

if (pid < 0)

{

printf("fork failed\n");

exit(0);

}

if (pid > 0)//parent

{

exit(0);

}

if ((sid = setsid()) < 0)

{

printf("setsid failed\n");

exit(0);

}

}

int main(int arg, char *args[])

{

setdaemon();

char buf[100];

int i = 0;

while (1)

{

memset(buf, 0, sizeof(buf));

sprintf(buf, "log %d", i++);

writelog(buf);

sleep(1);

}

return 0;

}

//shell

#! /bin/sh

WHOAMI=`whoami`

PID=`ps -u $WHOAMI | gerp mydaemond | awk '{print $1}'`

if (test "$1" = "") then

echo "mydaemond [start][stop][version]"

exit 0

fi

if ( test "$1" = "status") then

if ( test "$PID" = "") then

echo "not run"

else

echo "is running"

fi

exit 0

fi

if (test "$1" = "start") then

if (test "$PID" = "") then

./mydaemond

fi

exit 0

fi

if (test "$1" = "stop") then

if (test "$PID" = "") then

kill $PID

fi

exit 0

fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值