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. 

しかし、私のinitスクリプトの停止機能ではありません。

プロセスを停止する適切な方法は何ですか?

start-stop-daemon のマニュアルによると、

--stop 指定したプロセスの存在を確認します。そのようなプロセスが存在する場合、start-stop-daemon は --signal で指定されたシグナルを送信し、エラー ステータス 0 で終了します。そのようなプロセスが存在しない場合、start-stop-daemon はエラー ステータス 1 (- の場合は 0) で終了します。 -oknodo が指定されています)。--retry が指定されている場合、start-stop-daemon はプロセスが終了したことを確認します。

--signalそれ自体のドキュメントは見つかりませんでした。--signalSIGTERM を送信するかどうかを指定する方法と同様です。

#!/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