Minecraftの世界を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"
そこで、cronジョブを追加して5分ごとにスクリプトを実行しましたが、実行されていないようです。
これは私が使用したスクリプトです:
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh
誰でも私を助けてくれますか?
Cronjobの追加方法を指定しませんでした。これは大きな違いをもたらします:自分のアカウント内でcrontab -e
を使用した場合、スクリプトはユーザーで実行されます(したがって、crontabエントリのフィールドは1つ少なくなります-実行するユーザーは、それが知られているように)。上記のスニペットを単に/etc/cron.d
にコピーした場合、ユーザーを指定しなかったため(または「bash」という名前のユーザーが見つからなかったため)失敗します。したがって、次の手順を実行する必要があります。
/var/log/syslog
。エラーが発生する可能性があります)Backup.sh
スクリプトにデバッグ出力を追加して、開始されるかどうかを確認します3番目のポイントは、複数の方法で実現できます。
>>/tmp/testlog.log
をcrontabエントリの最後に追加します(出力を調査可能なファイルにリダイレクトします。さらに、2>&1
にはエラーコンソールからの出力が含まれます)echo "Backup.sh started">/tmp/testlog.log
さらに:bash
を使用してスクリプトを実行する場合は、/bin/sh
(デフォルトのUbuntuインストールでdash
を使用するように)を使用するように指示するのではなく、/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エントリの置換」に調整する必要があります;)