Linux--start-stop-daemon

参考:start-stop-daemon(8) - Linux manual page

1、名称

start-stop-daemon:启动和停止系统守护程序。

2、简介

start-stop-daemon [option...] command

3、描述

start-stop-daemon用于控制系统级进程的创建和终止。使用其中一个匹配选项,可以配置start-stop-deamon寻找一个正在运行进程的已有实例。

注意:除非指定--pid或--pidfile,start-stop-daemon行为类似killall。start-stop-daemon将扫进程表查找任何匹配这个进程名,(如果指定了)父进行pid,uid和/或gid的进程。任何匹配的进行将阻止--start启动这个守护进程。如果指定了--stop(或者通过--signal或--retry指定了一个),将发送TERM信号给所有匹配的进程。对于有存活过一个--stop的长生存期子进程的守护进程,你必须指定一个pidfile。

4、命令

1)-S --start [--] arguments

检查一个指定的进程的存在性。如果这样一个进程存在,start-stop-daemon什么也不做,并且用错误状态1退出(如果指定--oknodo,0)。如果这样一个进程不存在,它启动一个实例,使用通过--exec指定可执行文件,或者通过--startas指定。在命令行上--后传递的任何参数被不修改地传递给要被启动的程序。

2) -K, --stop

检查一个指定进程的存在性。如果这样一个进程存在,start-stop-daemon向他发送由--signal指定的信号,并且以错误状态0退出。如果这样一个进程不存在,start-stop-daemon以错误状态1退出(如果指定了--oknodo则0)。如果指定了--retry,则start-stop-daemon将检查这些进程已经终止了。

3)-T, --status

检查指定进程的存在性,并且根据LSB Init脚本操作,返回一个退出状态码。

4)-H,--help

显示用法信息并且退出。

5)-V, --version

显示程序版本并且退出。

5、选项

进行匹配的选项

1)--pid pid

用指定的pid检查一个进程。这个pid必须是一个大于0的数值。

2)--ppid ppid

用父进程pid ppid检查一个进程。这个ppid必须是一个大于0的数值。

3)-p, --pidfile pidfile

检查一个进程是否已经创建文件pidfile。

注意:如果旧进程终止了,而没有能够删除这个pidfile,单独使用这个进行匹配的选项,可能引起操作非预期的进程。

警告:对全局可写的pidfile使用这个匹配选项,或者对以非特权用户(非root)写这个pidfile的守护进程单独使用他,将用一个错误拒绝,由于这是一个安全风险,因为任何用户能够写入他,或者如果守护进程受到损坏,pidfile的内容不能被信任,并且接着一个特权运行程序(诸如一个以root被执行的init脚本)会结束操作任何系统进程。使用/dev/null时免除这些检查。

4)-x, --exec executable

检查进程是这个executable的实例。executable参数应该是一个绝对路径。

注意:这可能没有按被解析脚本预计地运行,由于可执行文件将指向这个解析器。考虑从一个chroot内运行的进程也将被匹配,因此可能也需要其它匹配限制。

5)-n, --name process-name

用名称process-name检查进程。process-name通常是进程文件名,但它可能已经被这个进程自身更改。

注意:在大多数系统上,这些信息取自源自内核的进程comm名,它倾向于有相当短的长度限制(认为多于15个字符是不可移植的)。

6)-u, --user username|uid

检查由username或uid指定用户拥有的进程。

注意:单独使用这个匹配选项将使得匹配这个用户的所有进程被操作。

通用选项

1)-g, --group group|gid

当启动这个进程时,切换到group或gid。

2)-s, --signal signal

带上--stop,指定信号发送给被终止的进程(默认:TERM)。

3) -R, --retry timeout|schedule

使用--stop,指定start-stop-daemon检查这些进程是否结束了。它将重复检查任何匹配的进行是否正在运行,直到没有匹配的进程运行。如果这些进程不存在,它将采取由调度表决定的进一步操作。

如果指定了timeout替代schedule,则调度表signal/timeout/KILL/timeout被使用,此处signal是由--signal指定的信号。

schedule是一个列表,其至少有由斜杆(/)分隔的两项;每项可能是-signal-number或[-]signal-name,它表示发送那个信号,或timeout,它表示为进程退出等待那些秒数,或者forever,它表示如果需要一直重复调度表余下的。

如果到达了调度表末尾并且没有指定forever,则start-stop-daemon以错误状态2退出。如果指定了一个调度表,则忽略用--signal指定的任何信号。

4)-a, --startas pathname

和--start一起,启动通过pathname指定的进程。如果没有指定,默认为传递给-exec的参数。

5)-t, --test

打印将采取的操作以及设置合适的返回值,但不采取行动。

6)-o, --oknodo

如果没有操作被采取,返回退出状态0替代1。

7)-q, --quiet

不打印信息消息;仅显示错误消息。

8)-c, --chuid username|uid[:group|gid]

在启动进程前,切换到这个用户名/uid。你也可以通过用你对chown命令(user:group)相同的方式追加一个:接着组或者gid,指定一个组。如果不带组指定一个用户,使用那个用户的主GID。当你使用这个选项时,即使没有指定--group选项,你必须知道主组和补充组也被设置了。--group选项仅用于用户通常不是其组员的组(如为一般用户添加每个组成员资格像nobody)。

9) -r, --chroot root

在启动这个进程前,更改目录并且根目录切换到root。请注意pidfile也被写在这个chroot之后。

10)-d, --chdir path

在启动这个进程前,切换目录到path。如果设置了-r |--chroot选项,在chroot后做这件事。当未被指定,在启动这个进程前,start-stop-daemon将切换目录到root目录。

11)-b, --background

一般跟不靠它们自己分离的程序一起使用。这个选项将强制start-stop-daemon在启动进程前fork,并且强制它进入后台。

警告:如果进程由于任何原因执行出错,start-stop-daemon不能检查退出状态。这是最后的方法,并且仅只适用于这样的程序,靠其自己forking没有意义或者为它们添加它们自己做这件事的代码是不合理的。

12) --notify-await

在认为服务器被启动前,等待后台进程发送一个准备好的通知。这实现了部分的systemd准备好协议,如在sd_notify(3)手册页中指定。支持一下变量:

READY=1:程序准备好提供服务,因此我们可以安全地退出。

EXTEND_TIMEOUT_USEC=number:程序请求增加超时时间number微妙。这将重置当前超时时间为指定的值。

ERRNO=number:程序以一个错误退出。做相同事情并且为errno值打印用户友好字符串。

13)--notify-timeout timeout

为-notify-await选项设定超时时间。当超时时间到了,start-stop-daemon将以一个错误代码退出,并且将不等待准备好通知。默认值是60秒。

14)-C, --no-close

当强制守护进程进入后台时,不关闭任何文件描述符。用于调试目的来查看进程输出,或者重定向文件描述符来记录进程输出。仅在使用--background时,才有用。

15)-O, --output pathname

当强制守护进程进入后台时,重定向stdout和stderr到pathname。仅在使用--background时,才有用。

16)-N, --nicelevel int

这在启动进程前更改了它的优先级。

17)-P, --procsched policy:prority

在启动进程前,这更改了它调度测量和进程优先级。通过在末尾添加一个:后跟值,可选地指定优先级。当前支持的测量是other, fifo和rr。

这个选项在某些不支持POSIX进程调度的系统上什么也不做。

18)-I, --iosched class:priority

在启动进程前,这更改了它的IO调度器类和优先级。通过在末尾添加一个:后跟值可选地指定优先级。默认优先级是4,除非类是idle,则优先级总是7。对于类,当前支持地值是idle,best-effort和real-time。

这个选项在不支持Linux IO调度地某些系统上什么也不做。

19) -k, --umask mask

这在启动进程前设置它地umask。

20)-m, --make-pidfile

当前启动一个不创建其自己pid文件地程序时,使用。这个选项将使得start-stop-daemon创建由--pidfile引用的文件,并且在执行这个进程前向其放置这个pid。注意,当使用了--remove-pidfile,在停止程序时,这个文件才被删除。

注意:这个特性不是在所有情况下有作用。当被执行的程序从其主进程forks时,最明显。由于此,仅在结合--background选项一起使用时,它通常才有作用。

21)--remove-pidfile

当终止一个不删除它自己pid文件的程序时,被使用。这个选项将使得start-stop-daemon在终止这个进程后删除由--pidfile引用的文件。

22) -v, --vervose

打印详细的信息消息。

退出状态

1)0:请求的操作被执行。如果指定了--oknodo,什么也没做也是可能的。当指定了--start,并且一个匹配的进程已经在运行了,或者在指定--stop并且没有匹配的进程时,这会发生。

2)1:如果没有指定--oknodo,并且什么也没有做。

3)2:如果指定了--stop和--retry,但到达了调度表末尾并且进程仍在运行。

4)3:任何其它错误。

当使用--status命令时,返回以下状态代码:

1)0:程序正在运行。

2)1:程序没有在运行并且pid文件存在。

3)3:程序没有在运行。

4)4:不能确定程序状态。

示例

1)启动food守护进程,除非一个已经在运行了(一个名为food的进程,以用户food运行,用pid在food.pid中)

start-stop-daemon --start --oknodo --user food --name food \
          --pidfile /usr/local/var/run/food.pid --startas /usr/sbin/food \
          --chuid food -- --daemon

2) 发送SIGTERM给food并且最多等待5秒等待其停止:

  start-stop-daemon --stop --oknodo --user food --name food \
          --pidfile /usr/local/var/run/food.pid --retry 5

3) 一个停止food的自定义调度表的演示:

 start-stop-daemon --stop --oknodo --user food --name food \
          --pidfile /usr/local/var/run/food.pid --retry=TERM/30/KILL/5
linux系统命令start-stop-daemon的源码及二进制,其中也提供了一个服务启动脚本模板。 此程序能帮助你实现将命令行程序变成服务运行,比如将"java -jar xxx.jar" 放在后台执行。 ./start-stop-daemon --help start-stop-daemon 1.9.18 for Debian - small and fast C version written by Marek Michalkiewicz , public domain. Usage: start-stop-daemon -S|--start options ... -- arguments ... start-stop-daemon -K|--stop options ... start-stop-daemon -H|--help start-stop-daemon -V|--version Options (at least one of --exec|--pidfile|--user is required): -x|--exec program to start/check if it is running -p|--pidfile pid file to check -c|--chuid change to this user/group before starting process -w|--chdir change the work directory to 'dir' -u|--user | stop processes owned by this user -n|--name stop processes with this name -s|--signal signal to send (default TERM) -a|--startas program to start (default is ) -N|--nicelevel add incr to the process's nice level -b|--background force the process to detach -m|--make-pidfile create the pidfile before starting -R|--retry check whether processes die, and retry -t|--test test mode, don't do anything -o|--oknodo exit status 0 (not 1) if nothing done -q|--quiet be more quiet -v|--verbose be more verbose Retry is |//... where is one of -|[-] send that signal wait that many seconds forever repeat remainder forever or may be just , meaning //KILL/ Exit status: 0 = done 1 = nothing done (=> 0 if --oknodo) 3 = trouble 2 = with --retry, processes wouldn't die
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值