1

我正在使用 start-stop-daemon 为我的脚本制作一个 INIT 脚本。我正在使用--make-pidfile因为我的脚本没有创建自己的 pid。我可以使用 start 启动我的脚本,并使用适当的 PID 生成 pid 文件。但是停止功能不起作用。我得到返回码 0--oknodo和 1 没有它。如果我做

ps -ef | grep perl

cat /home/me/mydaemon/run

我总是看到相同的PID。我可以使用终止脚本

kill -15 PID. 

但不是我的初始化脚本的停止功能。

停止我的进程的正确方法是什么?

根据 start-stop-daemon 手册,

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

我没有找到任何适合--signal自己的文档。就像如何指定--signal我是否要发送 SIGTERM。

#!/bin/sh
### BEGIN INIT INFO
# Provides:          myd
# Required-Start:    $local_fs $network $named $time $syslog
# Required-Stop:     $local_fs $network $named $time $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Diitalk daemon for sending push notifications
### END INIT INFO

. /lib/lsb/init-functions

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON="/home/me/mydaemon/myd"
NAME="myd"
DESC="My Daemon"
HOMEDIR=/home/me/mydaemon/run
PIDFILE="$HOMEDIR/$NAME.pid"
USER=me
GROUP=me
SHM_MEMORY=64
PKG_MEMORY=8
DUMP_CORE=no

case "$1" in
  start|debug)
        log_daemon_msg "Starting $DESC: $NAME"
        start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE \
                --exec $DAEMON || log_failure_msg " already running"
        log_end_msg 0
        ;;
  stop)
        log_daemon_msg "Stopping $DESC: $NAME"
        start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
                --exec $DAEMON
        echo $?
        log_end_msg 0
        ;;
4

1 回答 1

1

The issue was with the --exec that I used for matching the process name. As per the start-stop-daemon documentation :

   -x, --exec executable
          Check  for  processes  that  are  instances  of  this executable
          (according to /proc/pid/exe).

In my case as my script is Perl script, /proc/pid/exe is symlinked to /usr/bin/perl; therefore the exec couldnt match the process name. I removed the exec so that it matches only the PID. Now I can properly stop my process.

于 2015-07-15T21:38:03.833 回答