我有一个PHP脚本,我正在尝试创build一个服务。 我已经创build了服务,但是我无法启动它。 奇怪的是,完全相同的服务单位工作在我的另一台服务器上相同的设置。 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
任何想法如何得到这个工作?
如果两台服务器上的所有设置都相同,请查看套接字权限
用系统守护自己的进程是一种反模式 。 build议删除守护进程选项。
那么,既然你不是守护进程,你就不需要PidFile=选项。
此外,您不需要包含Type=simple ,因为simpletypes是默认types。
最后,您可能不需要ExecStop=行,因为systemd将停止为您服务。 在man systemd.servicesearchExecStop=来检查行为的细节,或者试一下。
关于为什么服务在您的服务工作:两台服务器之间必须有一些环境差异。 如果systemd单元文件是相同的,那么问题必须在别处。 检查服务在尝试启动时生成的日志。