저는 PHP로 작성된 소켓 서버를 개발 중입니다. 작업의 이 부분은 완료되었으나 이제 데몬으로 실행해야 합니다.
이를 위해 사용해 보았지만 start-stop-daemon
작동하지 않습니다. 내 서버가 데비안을 실행하고 있습니다.
간단하게 설명하자면, 다음 명령이 내 데몬을 실행하지 않는 이유는 무엇이며 어떻게 디버깅할 수 있습니까?입니다.
start-stop-daemon --start --quiet --background --make-pidfile --pidfile /var/run/server-ticket.pid --exec /usr/local/zend/bin/php /var/www/server/consultpilot/ServerTicket.php >> /var/log/server-ticket.log 2>> /var/log/server-ticket.log </dev/null
다음은 다음을 기반으로 한 전체 스크립트입니다.Klampaeckel의 튜토리얼까지:
#! /bin/sh
### BEGIN INIT INFO
# Provides: ServerTicket
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts ServerTicket
# Description: starts ServerTicket using start-stop-daemon
### END INIT INFO
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/zend/bin/php
DAEMON_OPTS="/var/www/server/consultpilot/ServerTicket.php"
NAME=server-ticket
DESC="Daemon for the Server Ticket from DiffMed"
PIDFILE="/var/run/${NAME}.pid"
LOGFILE="/var/log/${NAME}.log"
QUIET="--quiet"
START_OPTS="--start ${QUIET} --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} ${DAEMON_OPTS}"
STOP_OPTS="--stop --pidfile ${PIDFILE}"
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon $START_OPTS >> "${LOGFILE}" 2>> "${LOGFILE}" </dev/null
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon $STOP_OPTS
echo "$NAME."
rm -f $PIDFILE
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon $STOP_OPTS
sleep 1
start-stop-daemon $START_OPTS
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
참고로 프로세스를 시작했을 때 아무 것도 돌아오지 않았습니다. 하지만 완료하면 해당하는 프로세스가 없다는 메시지가 표시됩니다.
root:/var/run$ service server-ticket start
Starting Daemon for the Server Ticket from DiffMed: result : 0
server-ticket.
root:/var/run$ service server-ticket stop
Stopping Daemon for the Server Ticket from DiffMed: start-stop-daemon: warning: failed to kill 5772: No such process
1 pids were not killed
No process in pidfile '/var/run/server-ticket.pid' found running; none killed.
답변1
start-stop-daemon(8)
매뉴얼 페이지 에서 :
-x, --exec 실행 파일 Check for processes that are instances of this executable (according to /proc/pid/exe)
즉, 인스턴스를 확인 /usr/local/zend/bin/php
하고 해당 인스턴스를 찾으면 새 프로세스가 시작되지 않습니다. 다음과 같은 마법 쿠키가 있다고 가정해 보겠습니다.
#! /usr/local/zend/bin/php
/var/www/server/consultpilot/ServerTicket.php 스크립트의 첫 번째 줄에서 를 사용하여 실행될 수 있는지 확인한 chmod
후 다음과 같이 변경할 수 있습니다.
DAEMON=/var/www/server/consultpilot/ServerTicket.php
그리고 기대한 결과를 얻으세요.
답변2
답장을 보내주셔서 감사합니다!
내 주요 문제는 인용 및 연결 문제 때문입니다. 자세한 내용은 디버깅 및 단순화된 버전을 참조하세요.
#! /bin/sh
### BEGIN INIT INFO
# Provides: ServerTicket
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts ServerTicket
# Description: starts ServerTicket using start-stop-daemon
### END INIT INFO
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
DAEMON="/usr/local/zend/bin/php"
DAEMON_OPTS="/var/www/server/consultpilot/ServerTicket.php"
NAME=server-ticket
DESC="Daemon for the Server Ticket from DiffMed"
PIDFILE="/var/run/${NAME}.pid"
LOGFILE="/var/log/${NAME}.log"
START_OPTS="--start --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} ${DAEMON_OPTS}"
STOP_OPTS="--stop --pidfile ${PIDFILE}"}"
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting ${DESC}: "
start-stop-daemon $START_OPTS >> $LOGFILE
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon $STOP_OPTS
echo "$NAME."
rm -f $PIDFILE
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon $STOP_OPTS
sleep 1
start-stop-daemon $START_OPTS
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0