linux重启指定进程,自定义linux守护进程的开机启动

在上一篇《Linux启动之旅》中,我们了解了Linux启动过程,在该过程的最后一步,init进程拉起/etc/init.d/rcN.d/目录下指定的守护进程(daemon)。假若自定义的一个进程也需要随开机自启动,并随系统一直运行,我们可以怎么设置呢?

利用init进行进程托管

系统启动时,init程序根据/etc/inittab文件的配置,拉起系统服务、getty登陆终端,自定义的进程同样也可交由init程序管理。

最简单的方法,是在/etc/inittab文件中添加一条语句:

zz:2345:respawn:/tmp/lx/test_init

该语句含义为:

id: inittab文件中条目的唯一标识,这里为zz

runlevels: 列出指定命令或进程的运行级,这里指示/tmp/lx/test_init程序在2、3、4和5级别运行

action: 描述init对进程进行何种方式托管,respawn指该进程只要中止就立即重新启动

process: 要执行的进程,这里为/tmp/lx/test_init

对/etc/inittab文件修改过后,我们可发送HUP信号量给init进程,让修改生效:

#kill -HUP 1

以上命令执行完之后,就可以查到我们自定义的程序咯:

SER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 3783 0.0 0.0 3832 600 ? Ss Mar27 0:00 /tmp/lx/test_init

init是否能像我们设定的那样对自定义进程进行管理呢?kill掉以上进程再检验一下吧!

这种设定自启动、长久执行进程的方式十分简单,所要做的就是把程序准备好,再在/etc/inittab文件里添加一条语句即可。但是,如果要把进

程停掉,我们需要这么做:修改/etc/inittab文件,在对应条目开头加上注释,然后发送SIGHUP信号让init进程重新加载/etc

/inittab配置文件。

这时,在一旁扫地的阿姨瞄了一眼屏幕,不经意地说:停止进程就这么不方便,假如我还要重启进程、查询进程状态、修改进程运行级别呢?

守护进程设置

为更方便地对自定义进程进行起停、查询等操作,我们可将自定义进程设置为守护进程,并利用service等工具进行进程管理工作。下面我们来看守护进程的设置方法。

首先,和系统自带的守护进程一样,在/etc/init.d目录下需要有一个与自定义守护进程相对应的脚本文件(init script),该脚本包含以下内容。

说明信息(INIT INFO):

69c5a8ac3fa60e0848d784a6dd461da6.png

# /etc/init.d/test_daemon

### BEGIN INIT INFO

# Provides: test_daemon

# Required-Start: $local_fs

# Should-Start:

# Required-Stop:

# Should-Stop:

# Default-Start: 2 3 5 # Default-Stop: 0 1 2 6 # Description: test_daemon writes a message to /tmp/lx/test.log every 10 seconds,

# showing that the daemon is alive.

### END INIT INFO

69c5a8ac3fa60e0848d784a6dd461da6.png

守护进程的说明信息格式固定,其指明守护进程依赖的服务、启动/关闭的运行级别等信息。

进程开启(start)、退出(stop)、状态查询(status)等动作对应的脚本:

69c5a8ac3fa60e0848d784a6dd461da6.png

TEST_BIN=/usr/sbin/test_daemon case "$1" in start)

echo -n "Starting test_daemon" /sbin/startproc $TEST_BIN

rc_status -v

;;

stop)

echo -n "Shutting down test_daemon" /sbin/killproc -TERM $TEST_BIN

rc_status -v

;;

69c5a8ac3fa60e0848d784a6dd461da6.png

以上脚本调用了startproc、killproc工具对守护进程的起停进行控制。

最后,正确设置脚本权限,并使用insserv工具生成/etc/init.d/rcN.d目录下相应链接:

#chmod 744 /etc/init.d/test_daemon

#insserv /etc/init.d/test_daemon

insserv工具会根据守护进程init script中"INIT INFO"的依赖信息,决定系统启动时,自定义守护进程与已有守护进程的相对启动顺序:

#ll /etc/init.d/rc5.d/*test

lrwxrwxrwx 1 root root 7 Mar 29 01:02 /etc/init.d/rc5.d/K01test_daemon -> ../test_daemon

lrwxrwxrwx 1 root root 7 Mar 29 01:02 /etc/init.d/rc5.d/S01test_daemon -> ../test_daemon

完成以上步骤,在系统重启后,进程test_daemon就会自动启动。我们可以使用命令对该进程进行起停:

69c5a8ac3fa60e0848d784a6dd461da6.png

#/etc/init.d/test_daemon start Starting test_daemon done #/etc/init.d/test_daemon status Checking for service test_daemon running #/etc/init.d/test_daemon stop Shutting down test_daemon done

69c5a8ac3fa60e0848d784a6dd461da6.png

service工具可对/etc/init.d目录下的系统服务进行管理,也可以使用它完成与以上相同的操作:

#service test_daemon start

#service test_daemon status

#service test_daemon stop

另外,我们还可以使用chkconfig工具对test_daemon的启动级别进行查询和设定:

#chkconfig --list | grep test_daemon test_daemon 0:off 1:off 2:on 3:on 4:off 5:on 6:off #chkconfig test_daemon 35 #chkconfig --list | grep test test 0:off 1:off 2:off 3:on 4:off 5:on 6:off

小结

本文介绍了两种添加自定义后台进程的方法。将进程交由init托管,当进程退出时可被init重新拉起,设置方法简单,但不方便对进程进行管理;以

init script的方式将进程设置为系统服务项,利用系统已有的服务项管理工具service、chkconfig,能方便地对进程进行管理。

有时间看一下这个链接:

本文中使用的自定义进程代码和相关脚本可从下载。

---

本文基于Suse11sp1(x86_64),该发行版可从下载。

69c5a8ac3fa60e0848d784a6dd461da6.png

#cat /etc/SuSE-release ;uname -r

SUSE Linux Enterprise Desktop 11 (x86_64)

VERSION = 11 PATCHLEVEL = 1 2.6.32.12-0.7-default

69c5a8ac3fa60e0848d784a6dd461da6.png

Reference:

Document /etc/init.d/README under Suse11sp1

Document /etc/init.d/skeleton under Suse11sp1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值