Cronを使用してMinecraftサーバーのワールドデータを1時間ごとにバックアップするバックアップスクリプトを設定しましたが、ワールドはプレイヤーによって常に編集されているため、tarはファイルの読み取り中にファイルが変更されたことを通知していました。スクリプトのtarに--ignore-command-errorを追加し、手動で実行するとエラーを抑制しますが、cronは、ファイルの読み取り中に変更があったことを示すメールメッセージを送信し、メールがいっぱいになるため1時間に1回実行します。誰でもこれを修正する方法を知っていますか?これはスクリプトです:
filename=$(date +%Y-%m-%d)
cd /home/minecraft/Server/
for world in survival survival_nether survival_the_end creative superflat
do
if [ ! -d "/home/minecraft/backups/$world" ]; then
mkdir /home/minecraft/backups/$world
fi
find /home/minecraft/backups/$world -mtime +1 -delete
tar --ignore-command-error -c $world/ | Nice -n 10 pigz -9 > /home/minecraft/backups/$world/$filename.tar.gz
done
Cronは、コマンドの実行時に発生した可能性のある出力をすべて電子メールで送信しようとします。 cronのmanページから:
コマンドを実行すると、出力はcrontabの所有者(または、存在する場合はcrontabのMAILTO環境変数で指定されたユーザー)にメールで送信されます。 -sオプションを使用して、ジョブ出力をsyslogに送信することもできます。
したがって、特定のcrontabエントリに対して無効にするには、すべてのコマンド出力をキャプチャして、ファイルまたは/dev/null
。
30 * * * * notBraiamsBackup.sh >/dev/null 2>&1
すべてを/dev/null
にパイプする代わりに(何か問題が発生したときに何が起こったかの手掛かりがなくなる可能性があります)、次のようにスクリプトをパイプしてログファイルに書き込むことができます。
30 * * * * backup.sh > ~/logs/backup.log
メールの取得を停止するには、crontabファイルの先頭にあるMAILTO
変数を空の文字列に設定します。
MAILTO=""
特定のcronタスクのメールが不要な場合は、行の最後に>/dev/null 2>&1
を追加するだけです。
30 * * * * backup.sh >/dev/null 2>&1
gnu tarコマンドに次を追加する必要があります:-warning = no-file-changed
これにより、すべての「%s:ファイルは読み取り時に変更されました」というメッセージが表示されなくなります。そして、このソリューションを使用することで(すべてを/ dev/nullにリダイレクトしないことで)、問題が実際に発生した場合でもエラーメッセージを受け取ることができます。
-warningフラグを使用すると、tarが出力するさまざまなメッセージを有効または無効にできます。これは、使用できるすべてのキーワードを含むマニュアルの関連部分です: https://www.gnu.org/software/tar/manual/html_section/tar_27.html 。
注:キーワードの前に「no-」を追加すると、メッセージが抑制されます。