Berhenti cron mengirim surat untuk skrip cadangan?

13

Saya telah membuat skrip cadangan untuk mencadangkan data dunia di server Minecraft saya setiap jam menggunakan cron, tetapi karena dunia terus-menerus diedit oleh pemain, tar memberi tahu saya bahwa file berubah saat mereka dibaca. Saya menambahkan --ignore-command-error ke tar dalam skrip dan yang menekan kesalahan ketika saya menjalankannya secara manual, namun cron masih mengirim pesan email yang mengatakan bahwa file diubah ketika sedang dibaca, dan akhirnya membanjiri surat saya karena itu berjalan satu jam sekali. Adakah yang tahu cara memperbaikinya? Ini skripnya:

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
Tukang gerobak
sumber

Jawaban:

22

Cron akan berusaha mengirim email dengan output apa pun yang mungkin terjadi ketika perintah dijalankan. Dari halaman manual cron:

Saat menjalankan perintah, output apa pun dikirimkan ke pemilik crontab (atau kepada pengguna yang ditentukan dalam variabel lingkungan MAILTO di crontab, jika ada). Output pekerjaan apa pun juga dapat dikirim ke syslog dengan menggunakan opsi -s.

Jadi untuk menonaktifkannya untuk entri crontab tertentu, cukup ambil semua output perintah dan arahkan ke file atau ke /dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1
slm
sumber
1
D: menggunakan contoh saya!
Braiam
@Braiam - maaf saya merasa malas dan tidak ingin mengetiknya. Saya akan mengetik hal yang sama pula 8-).
slm
@Braiam - apakah itu lebih baik? 8-).
slm
Bekerja hebat, persis apa yang saya cari.
Carter
Perhatikan bahwa dalam CentOS 7 saya, dengan crontabtidak cron, -sberarti selinux context.....
WesternGun
13

Alih-alih mem-pipkan semuanya ke /dev/null(yang mungkin meninggalkan Anda tanpa petunjuk tentang apa yang terjadi jika terjadi kesalahan), Anda dapat menyalurkan skrip Anda untuk mencatat file seperti ini:

30 * * * * backup.sh > ~/logs/backup.log

Dan untuk berhenti menerima email, cukup setel MAILTOvariabel ke string kosong di awal file crontab Anda:

MAILTO=""
Enrico
sumber
4

Jika Anda tidak ingin mail untuk tugas cron tertentu, Anda bisa menambahkannya >/dev/null 2>&1di akhir baris:

30 * * * * backup.sh >/dev/null 2>&1
Braiam
sumber
Saya memilih cara ini: Anda kehilangan jejak segalanya, tetapi rapi.
WesternGun
0

Anda harus menambahkan yang berikut ini ke perintah gnu tar Anda : --warning = no-file-berubah

Itu akan menekan semua pesan " % s: file berubah saat kami membacanya ". Dan dengan menggunakan solusi ini (dan tidak mengarahkan ulang semuanya ke / dev / null), Anda masih bisa mendapatkan pesan kesalahan ketika semuanya benar-benar salah ..


Dengan bendera --warning Anda dapat mengaktifkan dan menonaktifkan banyak pesan berbeda yang dicetak tar . Inilah bagian yang relevan dari manual ini dengan semua kata kunci yang dapat Anda gunakan: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Catatan: dengan menambahkan " tidak- " di depan kata kunci, pesan akan ditekan.

The Boatman Silent
sumber