Minecraftの世界をRAMから5分ごとに保存するためにcronジョブを作成していました。
スクリプトをテストしましたが、機能しているようです。
スクリプトは次のようになります。
#!/bin/sh
VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"
そこで、5分ごとにスクリプトを実行するcronジョブを追加しましたが、実行されていないようです。
これは私が使用したスクリプトです:
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh
誰か助けてくれませんか?
承認された回答:
cronジョブを追加する方法を指定しませんでした。これは大きな違いになります。crontab -e
を使用した場合 自分のアカウント内では、スクリプトはユーザーと一緒に実行されます(したがって、crontabエントリのフィールドは1つ少なくなります。つまり、実行するユーザーです)。上記のスニペットを/etc/cron.d
にコピーしただけの場合 、ユーザーを指定しなかったため(つまり、「bash」という名前のユーザーが見つからなかったため)失敗します。したがって、次の手順を実行する必要があります。
- cronジョブを追加した方法に関する情報で質問を更新します
- システムログを確認します(
/var/log/syslog
;エラーの可能性を指摘する可能性があります) -
Backup.sh
にデバッグ出力を追加します 開始されたかどうかを確認するスクリプト
3番目のポイントは複数の方法で達成できます:
-
>>/tmp/testlog.log
を追加します crontabエントリの最後まで(出力を調査可能なファイルにリダイレクトします。さらに、2>&1
エラーコンソールからの出力が含まれます) - スクリプト自体にいくつかの行を追加します。
echo "Backup.sh started">/tmp/testlog.log
さらに:スクリプトをbash
を使用して実行することを意図しているため 、/bin/sh
を使用するように指示しないでください (これにより、dash
が使用されます デフォルトのUbuntuインストールの場合)ではなく、/bin/bash
。次に、実行可能にします。crontabエントリから「bash」を省略することもできます。
更新:
私の回答に対するあなたのコメントによると、あなたはcrontab -e
を使用しました ジョブを作成し、システムログによると実行されますが、定義はむしろ
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null
これにより、すべての出力がシステム内の最大のストレージである「ブラックホール」にリダイレクトされます:/dev/null
すべてを食べます(ただし、何も返しません)。この方法でSTDOUTとSTDERRをリダイレクトすると、エラーレポートが失われます。そのため、詳細は言うまでもなく、エラーが発生したことをまったく知ることができません。テストのために、&>/dev/null
を省略する必要があります 完全に分けます。それが機能する場合でも、不要な出力のみを抑制する必要があります。そうしないと、問題が発生したときにわからないためです。したがって、少なくともアンパサンドを除外して、Cronが発生したエラーを報告できるようにすることをお勧めします。
さらに:出力がリダイレクトされたら(あなたの場合のように/dev/null
)、最後に別のリダイレクトを追加しても、すべてがすでになくなっているため、結果は得られません。したがって、上記のアドバイスを「crontabエントリの最後に…を追加する」から「crontabエントリのそれを置き換える」に調整する必要があります😉