Bash
systemctl 在控制台中輸入時有效,但在伺服器啟動時無效
我正在嘗試執行 run.sh 腳本來啟動遊戲伺服器管理面板。我創建了一個服務來在啟動時執行它。當我
sudo systemctl start servicename.service
在控制台中輸入時它工作正常,但在啟動時似乎它正在中斷。[Unit] Description=Name Here After=network.target [Service] Type=forking ExecStart=/usr/bin/scriptname_start.sh RemainAfterExit=yes User=username Group=usergroup TimeoutStartSec=180 [Install] WantedBy=multi-user.target
scriptname_start.sh 內容
#!/bin/bash screen -dm bash -c 'bash /home/my/directory/run.sh +set serverProfile profilename +set Port 12345'
來自腳本所有者的文件
需要在監控模式下從 FXServer 內部啟動,要做到這一點,只需執行 run.sh 而不帶任何 +exec 參數。
面板的錯誤 (面板在沒有服務的情況下執行良好,所以我不認為這是面板的問題)
Restarting server (server partial crash detected). [04:46:17][FXRunner] >> [1918] FXServer Exited. [04:46:17][FXRunner] >> [1918] FXServer Closed. (code null) [04:46:19][FXRunner] >> [2040] FXServer Started!
有什麼問題?
非常感謝!
PS。我是新手,所以越詳細越好 x))
journalctl –unit=fivemtxadmin.service -b
[root@server ~]# journalctl --unit=fivemtxadmin.service -b -- Logs begin at Sun 2020-06-21 05:19:00 CEST, end at Sun 2020-06-21 05:19:23 CEST. -- Jun 21 03:19:01 server.domain.eu systemd[1]: Starting FiveM TxAdmin... Jun 21 03:19:01 server.domain.eu systemd[1]: Started FiveM TxAdmin.
systemctl 狀態五mtxadmin.service
[root@server ~]# systemctl status fivemtxadmin.service ● fivemtxadmin.service - FiveM TxAdmin Loaded: loaded (/usr/lib/systemd/system/fivemtxadmin.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-06-21 03:19:01 CEST; 2h 2min ago Process: 822 ExecStart=/usr/bin/fivemtxadmin_start.sh (code=exited, status=0/SUCCESS) Main PID: 837 (screen) CGroup: /system.slice/fivemtxadmin.service ├─ 837 /usr/bin/SCREEN -dm /bin/bash -c bash /home/username/fivem/f... ├─ 843 /home/username/fivem/fx-server/alpine/opt/cfx-server/ld-musl... └─2077 /home/username/fivem/fx-server/alpine/opt/cfx-server/ld-musl... Jun 21 03:19:01 server.domain.eu systemd[1]: Starting FiveM TxAdmin... Jun 21 03:19:01 server.domain.eu systemd[1]: Started FiveM TxAdmin.
具體問題的答案是我只需要
Type=idle
在一切啟動後使用並啟動服務。
根據您提供的資訊,尚不清楚問題出在哪裡,但您可以檢查以下幾點:
- 對單元文件進行更改後,您必須執行
systemctl daemon-reload
以觸發重新載入這些文件。- 通過執行手動啟動服務
sudo systemctl start servicename.service
並驗證它啟動時沒有任何問題。如果您沒有看到任何輸出,就是這種情況。- 執行
systemctl status servicename.service
。驗證它是否將服務報告為正在執行。還要驗證服務是否“啟用”。如果不是這種情況sudo systemctl enable servicename.service
,請執行此操作。- 重新啟動機器並檢查服務是否再次執行。
如果服務無法啟動,請執行
journalctl -u servicename.service
以查看腳本已列印的任何日誌消息。關於您的腳本的一些想法:
- 確保允許您在服務文件中指定的使用者執行腳本。
- 您的腳本沒有指定它呼叫的命令的完整路徑。當您登錄時,通常會為您的 shell 設置此路徑。
PATH
在系統引導期間啟動服務時,可能不會設置環境變數,因此最好在腳本中使用絕對路徑,如下所示:#!/bin/bash /usr/bin/screen -dm /bin/bash -c '/bin/bash /home/my/directory/run.sh +set serverProfile profilename +set Port 12345'
- 檢查您的腳本是否需要網路以外的任何單元啟動。也許缺少依賴項?如果添加
sleep 10
到腳本的開頭“修復”您的問題,可能就是這種情況。- 錯誤消息很可能是由在
screen
. 要查看它們,您需要附加screen -r 837
(您在上面提供的輸出中的 PID)。Ctrl
如果需要,在按下+後使用游標鍵滾動Esc
。