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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <time.h>
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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值