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内で起動する必要があります。これを行うには、+execパラメータなしでrun.shを実行するだけです。
パネルエラー (パネルはサービスなしでうまくいくのでパネルの問題ではないようです。)
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 状態 5mtxadmin.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.
答え1
ご提供いただいた情報は、問題が何であるかは明確ではありませんが、次のことを確認できます。
ユニットファイルを変更したら、
systemctl daemon-reload
そのファイルを再ロードするために実行する必要があります。サービスを実行して手動で起動し
sudo systemctl start servicename.service
、問題なく起動することを確認します。出力が表示されない場合、これが発生します。ランニング
systemctl status servicename.service
。サービスが実行中であることを報告していることを確認してください。また、サービスが「有効」になっていることを確認してください。そうでない場合は、sudo systemctl enable servicename.service
次のようにします。コンピュータを再起動し、サービスが再実行されていることを確認してください。
サービスが開始されない場合は、実行してスクリプトがjournalctl -u servicename.service
印刷したログメッセージを確認してください。
スクリプトについていくつかの考え方:
サービスファイルに指定したユーザーにスクリプトを実行する権限があることを確認してください。
スクリプトは、呼び出すコマンドのフルパスを指定しません。このパスは通常、ログイン時にシェルに対して設定されます。
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。
答え2
あなたの特定の質問に対する答えは、Type=idle
すべてが完了した後にサービスを使用して開始することです。