【c&c++】linux守护进程设置开机自启动的两种方式

linux守护进程设置开机自启动的两种方式

 

前期准备

首先,我们创建一个守护进程
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 $?

 

posted @ 2024-02-08 12:18  opensmarty  阅读(270)  评论(0编辑  收藏  举报