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를 루트로 설정해야 합니다(다른 것들 사이). 일반 프로세스 실행을 위한 제어 프로세스 역할을 할 수 있는 최소한의 데몬이 있습니다.마치 데몬인 것처럼- 예를 들어악마
사용자 정의 신호 처리 및 (진단/감사 기능이 필요한 경우) 로깅 기능이 필요할 수도 있습니다.
그러나 POSIX 확장을 사용하면 필요한 모든 기능이 노출됩니다.setid() 및 포크()자신의 코드에서 - 또는 그냥 다운로드해도 됩니다.미리 작성된 일부 PHP 코드당신을 위해 모든 일을 하세요.
참고: 인터넷에 잘못된 코드와 제안을 게시하는 사람들이 많이 있습니다. 하지만 그들은 자신에게 적합하다고 생각합니다. 위에 링크한 코드는 더 나은 구현 중 하나입니다.
답변2
나는 당신이 읽을 것을 제안합니다PHP 스크립트를 데몬 프로세스로 실행 .
또한 원래 시스템 데몬처럼 PHP 데몬을 작성하는 방법에 대한 자세한 설명 -PHP 데몬을 작성하는 방법.