我似乎找不到任何可以做到这一点的事情,而且我花了2个小时在谷歌试图找到解决方案,我只是厌倦了。我确信这是一个简单的解决方案,但我似乎无法找到它。
我需要在/var/www/Game/Sockets/ChatServer.php中运行一个.php文件作为守护进程。在我的基于浏览器的游戏中,此文件充当我的聊天系统的套接字服务器。尽管尝试了很多不同的东西,但我无法让它在启动时启动。我可以使用“service ChatServerDaemon start”来启动守护进程,但是在启动时它不起作用。我在init.d中找到的文件是:
#! /bin/sh
# Installation
# - Move this to /etc/init.d/myservice
# - chmod +x this
#
# Starting and stopping
# - Start: `service myservice start` or `/etc/init.d/myservice start`
# - Stop: `service myservice stop` or `/etc/init.d/myservice stop`
#ref http://till.klampaeckel.de/blog/archives/94-start-stop-daemon,-Gearman-and-a- little-PHP.html
#ref http://unix.stackexchange.com/questions/85033/use-start-stop-daemon-for-a-php- server/85570#85570
#ref http://serverfault.com/questions/229759/launching-a-php-daemon-from-an-lsb-init- script-w-start-stop-daemon
NAME=ChatServerDaemon
DESC="Chat Server Daemon for Taloren."
PIDFILE="/var/run/${NAME}.pid"
LOGFILE="/var/log/${NAME}.log"
DAEMON="/usr/bin/php"
DAEMON_OPTS="/var/www/Game/Sockets/ChatServer.php"
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 >> $LOGFILE
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
我很生气,厌倦了试图让它发挥作用。请有人帮我这个。如果答案很明显,我很抱歉。 :/
答案 0 :(得分:0)
简单地将脚本放在/etc/init.d/
中并不足以使其在启动时运行。需要指定系统应该在哪个运行级别启动或停止服务。在使用经典SysV init系统的发行版上,可以通过在特殊文件夹中创建指向init脚本的符号链接来完成。
以下是确定当前运行级别的人员:
$ who -r
run-level 2 Apr 9 10:39 last=S
例如,以下是如何配置cups
打印服务以便在运行级别2中启动:
$ ls -l /etc/rc2.d/S20cups
lrwxrwxrwx 1 root root 14 Apr 6 01:24 /etc/rc2.d/S20cups -> ../init.d/cups
必须在运行级别2中启动或停止的所有内容都在/etc/rc2.d/
中具有符号,当必须启动服务时,符号链接的名称以S
开头,而当{2}时,K
必须停止服务,然后有两位数的优先级。
手动处理这个可能很麻烦,因此主要发行版具有自动执行此操作的工具。在Debian或Ubuntu上它是update-rc.d
。在RedHat上,它是chkconfig
。
此SysV
初始化系统也被systemd
(仍然支持SysV
初始化脚本)所取代。因此,直接编写systemd
的配置文件可能是值得的。或者,您可以使用其他服务管理器,例如supervisord
或god
。它们更易于管理,并且具有很好的功能,例如在失败时自动重启服务。