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エントリのそれを置き換える」に調整する必要があります😉