我有一個 PHP 腳本,我正在嘗試為其建立服務。我已經創建了該服務,但無法啟動它。奇怪的是,完全相同的服務單元在我相同設定的另一台伺服器上工作。 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=
inman systemd.service
以檢查其行為方式的詳細信息,或嘗試一下。
關於為什麼服務在你的服務上運作:兩台伺服器之間肯定存在一些環境差異。如果systemd
單元檔案相同,則問題一定出在其他地方。檢查您的服務在嘗試啟動時產生的日誌。