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
それ自体のドキュメントは見つかりませんでした。--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
;;