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服务,步骤如下:

  1.    写服务启动脚本文件(后附例子)
    
  2.    修改脚本文件chmod 777 6-8(设置脚本文件的权限)
    
  3.    脚本文件拷贝到 /etc/rc.d/init.d/
    
  4.    chkconfig --add 6-8添加服务
    
  5.    重新启动(完成)
    

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 $?
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux守护进程,也称为后台进程或服务进程,是一种在系统启动后持续运行并执行特定任务的程序。它们通常不会因为用户会话结束而关闭,即使用户注销或系统重启,这些进程也会继续运行。 在Linux中,让一个程序以守护进程方式启动主要有以下几种方法: 1. **使用init或systemd**:Linux传统的初始化系统init(现在大多数发行版使用systemd)提供了`start`、`stop`、`restart`等命令来控制服务。在`/etc/init.d`目录下有对应的脚本文件,如`myservice.sh`,通过`sudo service myservice start`命令启动。 2. **systemctl**: 对于systemd系统,可以在`/etc/systemd/system`目录创建或编辑服务单元文件(如`myservice.service`),然后用`sudo systemctl start myservice`启动,或在`systemctl`命令行工具中使用更灵活的选项。 3. **cron jobs**:通过定时任务计划器cron,可以设置守护进程在特定时间或周期性地执行。 4. **写入rc.local或类似文件**:在系统的启动脚本中,如`/etc/rc.local`,添加守护进程启动的命令。 5. **环境变量**:有些服务可能会设置环境变量,如`DAEMON`或`PIDFILE`,用于指示其为守护进程运行,并提供进程ID供管理。 为了确保守护进程能在系统重启后自动启动,通常会在启动脚本的末尾加上`exit 0`(表示成功启动)或在systemd服务文件中设置`After=network.target`(等待网络服务启动启动)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值