再起動するたびに Minecraft サーバーを起動するスクリプトがあります。ログを見ると、cmd が呼び出されていることがわかりますが、画面は開かれていません。スクリプトを手動で実行すると、/home/minecraft/scripts/startMinecraft.sh
完璧に動作します。
これが私のcrontabです:
@reboot /home/minecraft/scripts/startMinecraft.sh
38 00,06,12,16 * * * /home/minecraft/scripts/backup.sh
CentOS 6 サーバーです。
これが私のstartMinecraft.sh
スクリプトです。
screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
前にも言ったように、その行を正確に手動で実行すると、完璧に動作します。
答え1
cron ジョブが実行されると、ターミナルまたは SSH 経由でログインするときにユーザーが設定するのと同じ方法で $PATH 値が設定されないため、バイナリのフルパスを設定する必要がある可能性がありますscreen
。Stack Overflowのこの回答取引全体についての適切な説明です。
したがって、スクリプトを次のように変更することをお勧めします。
screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
これに対して:
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
そして、/path/to/screen
実際のフルパスに置き換えます。これは、次のように簡単に取得できます。which
このような:
which screen
出力は次のようになります。
/usr/bin/screen
または、次のようにスクリプト内に実際に配置して $PATH を設定することもできます。
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
もちろん、これはシステム上の実際の PATH 値と一致する必要があります。これは次のように入力して取得できます。
echo $PATH
しかし、個人的には、よりクリーンなフルパス方式を好みます。また、$PATH 値は頻繁に変更されるため、Bash スクリプトでさまざまな値が混在することは望ましくありません。
PS: また、ちょっとしたことですが、Bashスクリプトでは実際のBashインタープリタの値が設定されている必要があります。「シバン」上部にこのように記述すると、スクリプトは次のようになります。
#!/bin/bash
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh
もちろん、/bin/bash
実行することでシステムの実際の Bash パスと一致するはずですが、最新のインストールではパスwhich bash
に含まれない可能性は低いと思います。/bin/bash