Bash

systemctl 在控制台中輸入時有效,但在伺服器啟動時無效

  • June 23, 2020

我正在嘗試執行 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在一切啟動後使用並啟動服務。

根據您提供的資訊,尚不清楚問題出在哪裡,但您可以檢查以下幾點:

  1. 對單元文件進行更改後,您必須執行systemctl daemon-reload以觸發重新載入這些文件。
  2. 通過執行手動啟動服務sudo systemctl start servicename.service並驗證它啟動時沒有任何問題。如果您沒有看到任何輸出,就是這種情況。
  3. 執行systemctl status servicename.service。驗證它是否將服務報告為正在執行。還要驗證服務是否“啟用”。如果不是這種情況sudo systemctl enable servicename.service,請執行此操作。
  4. 重新啟動機器並檢查服務是否再次執行。

如果服務無法啟動,請執行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

引用自:https://unix.stackexchange.com/questions/594113