前期准备
首先,我们创建一个守护进程
1、守护进程初始化程序init.c文件如下:
#include<unistd.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
void init_daemon(void)
{
pid_t child1,child2;
int i;
child1 = fork();
if(child1>0)
{
exit(0);
}
else if(child1<0)
{
perror("创建子进程失败");
exit(1);
}
setsid();
chdir("/tmp");
umask(0);
for(i=0;i<NOFILE;++i)
close(i);
return;
}
2、测试文件6-8.c内容如下:
#include<stdio.h>
#include<time.h>
void init_daemon(void);
int main()
{
FILE *fp;
time_t t;
init_daemon();
while(1)
{
sleep(10);
if((fp=fopen("6-8.log","a"))>=0)
{
t=time(0);
fprintf(fp,"守护进程还在运行,时间是:%s",asctime(localtime(&t)));
fclose(fp);
}
}
}
实验结果如下:
第一种方式
自启动程序方法1:
在etc/rc.local文件最后一行加入/home/robin/code/6-8 (其中6-8测试程序名称,一定要写绝对路径)。即可自启动
第二种方式
自启动程序方法2:
创建linux服务,步骤如下:
-
写服务启动脚本文件(后附例子)
-
修改脚本文件chmod 777 6-8(设置脚本文件的权限)
-
脚本文件拷贝到 /etc/rc.d/init.d/
-
chkconfig --add 6-8添加服务
-
重新启动(完成)
6) 重新启动后在终端输入命令:ps -A -opid,stime,etime,args即可查看开机自启的守护进程。
7)查看服务是否存在
chkconfig --list | grep wkcenter
查看服务状态
chkconfig wkcenter on
注意, 确认wkcenter在2,3,4,5中任意或者部分开启, 必须为绿字. 灰字代表服务无法开机启动或者其他问题
8 )测试
临时开启命令测试
service wkcenter start
#!/bin/bash
#
# autoruntest the shell script takes care of autoruntest auto start and stop
#
# chkconfig: 2345 20 80
# description: 6-8
# processname: /etc/rc.d/init.d/autoruntest
EXEC_PATH=/home/robin/code/6-8
EXEC=6-8
PID_FILE=/var/run/6-8.pid
DAEMON=/home/robin/code/6-8
# Source function library.
. /etc/rc.d/init.d/functions
if ! [ -x $EXEC_PATH/$EXEC ] ; then
echo "ERROR: $EXEC_PATH/$EXEC not found"
exit 1
fi
stop()
{
echo "Stoping $EXEC ..."
killall $DAEMON >/dev/null
usleep 100
echo "Shutting down $EXEC: [ OK ]"
}
start()
{
echo "Starting $EXEC ..."
$DAEMON > /dev/null &
usleep 100
echo "Starting $EXEC: [ OK ]"
}
restart()
{
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status -p $PID_FILE $DAEMON
;;
*)
echo "Usage: service $EXEC {start|stop|restart|status}"
exit 1
esac
exit $?