Debian下开机服务脚本的编写

文章目录

Debian vps设置软件开机自启动这篇文章中,我介绍了Debian中设置软件自启动的两种方式,其中tennfy比较推荐的是通过添加开机服务来实现软件开机自启动。今天就来详细的介绍下如何编写系统服务脚本。

开机服务脚本示例

为方便给大家一个清晰的认识,这里贴出来一个简单的开机服务脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/sh
### BEGIN INIT INFO
# Provides:          wechat-task
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the wechat-task
# Description:       starts wechat-task using start-stop-daemon
### END INIT INFO
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
USER=root
GROUP=root
DESC=wechat-task                 # Introduce a short description here
NAME=wechat-task                 # Introduce the short server's name here
DAEMON=/opt/wechat-task.py       # Introduce the server's location here
DAEMONARGS=""
PIDFILE=/var/run/$NAME.pid
LOGFILE=/var/log/$NAME.log
 
. /lib/lsb/init-functions
 
test -f $DAEMON || exit 0
 
case "$1" in  
        start)  
                log_daemon_msg "Strating $DESC: $NAME"  
                start-stop-daemon -S -q -b -m -p $PIDFILE -c $USER:$GROUP -a $DAEMON -- $DAEMONARGS
                log_end_msg $?
                ;;  
        stop)  
                log_daemon_msg "Stopping $DESC: $NAME"  
                start-stop-daemon -K -q -p $PIDFILE
                log_end_msg $?  
                if [ -e $PIDFILE ]; then  
                    rm $PIDFILE  
                fi  
                ;;  
        restart)    
                $0 stop
                $0 start  
                ;;  
        status)
                start-stop-daemon -T -p $PIDFILE
                log_end_msg $?
                ;;
        *)  
                echo "usage: $NAME {start|stop|restart|status}"  
                exit 1  
                ;;  
esac  
 
exit 0

开机服务脚本编写

1、脚本头部注释

在上面的示例中,我们可以看到脚本头部注释对脚本需要的依赖、运行级别、说明做了详细的描述。

一般来说,我们不需要做过多的改动,只需要把Provides、Short-Description、Description修改成你自己的就可以了。

在示例脚本中,我将Provides的名字设为wechat-task,那么我们一般脚本的名字也设置为wechat-task,即脚本执行一般位/etc/init.d/wechat-task xxx

2、脚本功能实现

在本脚本中支持常用的三种命令:start、stop以及restart。通过执行/etc/init.d/wechat-task start/stop/restart即可实现脚本的启动、关闭及重启。

我们一般采用start-stop-daemon来实现服务守护进程运行,用户在使用该命令时,一般只需替换 $USER、$GROUP、$DAEMON这三个变量的定义即可。

start-stop-daemon的介绍如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1.功能作用 
启动和停止系统守护程序 
 
2.位置 
/sbin/start-stop-daemon 
 
3.主要参数 
Commands: 
-S|--start -- <argument> ... 开启一个系统守护程序,并传递参数给它 
-K|--stop 停止一个程序 
-T|--status 得到程序的状态 
-H|--help 显示帮助信息 
-V|--version 打印版本信息 
Matching options (at least one is required): 
-p|--pidfile <pid-file> pid file to check 
-x|--exec <executable> program to start/check if it is running 
-n|--name <process-name> process name to check 
-u|--user <username|uid> process owner to check 
Options: 
-g|--group <group|gid> 按指定用户组权限运行程序 
-c|--chuid <name|uid[:group|gid]> 
按指定用户、用户组权限运行程序 
-s|--signal <signal> signal to send (default TERM) 
-a|--startas <pathname> program to start (default is <executable>) 
-r|--chroot <directory> chroot to <directory> before starting 
-d|--chdir <directory> change to <directory> (default is /) 
-N|--nicelevel <incr> add incr to the process' nice level 
-P|--procsched <policy[:prio]> 
use <policy> with <prio> for the kernel 
process scheduler (default prio is 0) 
-I|--iosched <class[:prio]> use <class> with <prio> to set the IO 
scheduler (default prio is 4) 
-k|--umask <mask> 在开始运行前设置<mask> 
-b|--background 后台运行 
-m|--make-pidfile 当命令本身不创建pidfile时,由start-stop-daemon创建 
-R|--retry <schedule> 等待timeout的时间,检查进程是否停止,如果没有发送KILL信号; 
-t|--test 测试模式 
-o|--oknodo exit status 0 (not 1) if nothing done 
-q|--quiet 不要输出警告 
-v|--verbose 显示运行过程信息

开机服务脚本的使用

写好开机服务脚本后,我们将该文件保存为名为wechat-task的文件,并拷贝至/etc/init.d目录下。

需要注意的是,我们要先给它添加执行性权限:

1
chmod a+x ./wechat-task

然后采用如下方式添加开机服务

1
update-rc.d xxx defaults

事实上该命令的作用是在rc0.d、rc1.d、、、rc6.d六个目录下建立软连接。

如果想移除该开机服务,可以使用如下代码

1
update-rc.d -f xxx remove


本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: http://www.tennfy.com/4563.html

下一篇文章:

上一篇文章:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

8 + 7 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部