Centos 6.9のinit.dでPHPスクリプトを実行しようとしていますが、サービスを開始したターミナルを終了すると、アプリケーションが停止し、アプリケーションが実行されているにもかかわらず、アプリケーションの状態は常に停止しているとマークされます。
#!/bin/sh
#
# arrbot This shell script takes care of starting and stopping
# the arbbot
#
# chkconfig: - 65 20
# description: arbbot trader.
# processname: arbbot
# Required-Start: $network $syslog $mysqld
# Required-Stop: $network $syslog $mysqld
# Short-Description: start and stop arbbot server
# Description: arbbot trader
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
NAME=arbbot
DESC="arbbot trader"
LOGFILE="/var/log/${NAME}.log"
DAEMON="/usr/bin/php5"
WORK_DIRECTORY="/var/www/arbbot/"
DAEMON_OPTS="/var/www/arbbot/main.php"
ARBDIR="/var/www/arbbot"
ARBBOT="exec ${DAEMON} ${DAEMON_OPTS} > ${LOGFILE} 2>&1 > NULL"
LOCK="/var/lock/subsys/arbbot"
start() {
echo -n "Starting ${DESC}: "
cd "${WORK_DIRECTORY}"
$ARBBOT
RETVAL=$?
[ $RETVAL -eq 0 ] && touch -- "$LOCK"
return $RETVAL
}
stop() {
echo -n "Shutting down arbbot: "
killproc $ARBBOT
rm -f $LOCK
return
}
restart() {
stop
start
}
reload() {
restart
}
case "$1" in
start)
start
echo "$NAME."
;;
stop)
stop
echo "$NAME."
;;
status)
status ARBBOT
RETVAL=$?
;;
restart)
restart
;;
reload)
reload
;;
*)
echo "Usage: {start|stop|status|reload|restart[|probe]"
exit 1
;;
esac
exit $RETVAL
答え1
デーモンプロセスには、他のプロセスでは利用できない多くの機能があります。 stdoutとstdinを閉じ、制御プロセスから切り離し、cwdをrootに設定する必要があります(他のものの間)。通常のプロセスを実行するための制御プロセスとして機能できる最小限のデーモンがあります。まるでデーモンのように- 例えば悪魔
カスタム信号処理および(診断/監査機能が必要な場合)ロギング機能が必要になる場合があります。
ただし、POSIX拡張機能を使用すると、必要なすべての機能が公開されます。setid() とフォーク()自分のコードから - または単にダウンロードすることができます。あらかじめ作成されたいくつかのPHPコードあなたのためにすべてをしてください。
注:インターネットに誤ったコードや提案を投稿する人がたくさんいます。しかし、彼らは自分に適していると思います。上記のリンクは、より良い実装の1つです。
答え2
私はあなたが読むことを提案しますPHPスクリプトをデーモンプロセスとして実行する 。
また、元のシステムデーモンのようにPHPデーモンを作成する方法の詳細な説明 -PHPデーモンを書く方法。