我有一个 PHP 脚本,正在尝试为其创建服务。我已创建该服务,但无法启动它。奇怪的是,完全相同的服务 UNIT 在我的另一台具有相同设置的服务器上运行。PHP 脚本设置为使用 -d 开关以守护进程方式运行。命令本身运行正常,但不是通过 systemd 运行。
这就是我得到的
● serverio.service - Socket Server Service
Loaded: loaded (/etc/systemd/system/multi-user.target.wants/serverio.service)
Active: inactive (dead) since Wed 2017-01-18 23:41:49 UTC; 2s ago
Process: 22921 ExecStop=/usr/bin/php /opt/sockets/server.php stop (code=exited, status=0/SUCCESS)
Process: 22917 ExecStart=/usr/bin/php /opt/sockets/server.php start -d (code=exited, status=0/SUCCESS)
Main PID: 22917 (code=exited, status=0/SUCCESS)
Jan 18 23:41:49 hostname systemd[1]: Started SocketIO Server Service.
Jan 18 23:41:49 hostname systemd[1]: Starting SocketIO Server Service...
这是我的服务文件。
[Unit]
Description=SocketIO Server Service
[Service]
Type=simple
PIDFile=/opt/sockets/phpio.pid
ExecStart=/usr/bin/php /opt/sockets/server.php start -d
ExecStop=/usr/bin/php /opt/sockets/server.php stop
[Install]
WantedBy=multi-user.target
知道如何让它工作吗?
答案1
如果两台服务器上的所有设置都相同,则查看套接字权限
答案2
使用系统守护自己的进程是一种反模式。建议删除守护进程选项。
那么,由于您没有守护进程,因此您不需要该PidFile=
选项。
此外,您不需要包含Type=simple
,因为simple
类型是默认的。
最后,您可能不需要该ExecStop=
线路,因为systemd
它会为您停止服务。搜索ExecStop=
以man systemd.service
查看其行为的详细信息,或尝试一下。
关于为什么该服务在您的服务上运行良好:两台服务器之间肯定存在一些环境差异。如果单元systemd
文件相同,则问题一定出在其他地方。检查您的服务在尝试启动时生成的日志。