Dừng cron gửi mail cho kịch bản sao lưu?


13

Tôi đã thiết lập một tập lệnh sao lưu để sao lưu dữ liệu thế giới trên máy chủ Minecraft của mình hàng giờ bằng cron, nhưng vì thế giới liên tục bị người chơi chỉnh sửa, tar đã nói với tôi rằng các tệp đã thay đổi trong khi chúng được đọc. Tôi đã thêm --ignore-lệnh-error vào tar trong tập lệnh và nó sẽ loại bỏ mọi lỗi khi tôi chạy thủ công, tuy nhiên cron vẫn gửi một thông báo mail nói rằng các tệp đã bị thay đổi trong khi đọc và cuối cùng làm ngập thư của tôi vì nó chạy mỗi giờ một lần. Bất cứ ai cũng biết làm thế nào để sửa lỗi này? Đây là kịch bản:

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

Câu trả lời:


22

Cron sẽ cố gắng gửi email với bất kỳ đầu ra nào có thể xảy ra khi lệnh được chạy. Từ trang người đàn ông của cron:

Khi thực hiện các lệnh, bất kỳ đầu ra nào cũng được gửi đến chủ sở hữu của crontab (hoặc cho người dùng được chỉ định trong biến môi trường MAILTO trong crontab, nếu điều đó tồn tại). Bất kỳ đầu ra công việc nào cũng có thể được gửi đến syslog bằng cách sử dụng tùy chọn -s.

Vì vậy, để vô hiệu hóa nó cho một mục crontab cụ thể, chỉ cần nắm bắt tất cả các đầu ra lệnh và hướng nó đến một tệp hoặc đến /dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1

1
D: sử dụng ví dụ của tôi!
Braiam

@Braiam - xin lỗi tôi cảm thấy lười biếng và không cảm thấy muốn gõ nó lên. Dù sao thì tôi cũng đã gõ điều tương tự 8-).
slm

@Braiam - như vậy có tốt hơn không? số 8-).
slm

Hoạt động tuyệt vời, chính xác những gì tôi đang tìm kiếm.
Carter

Lưu ý rằng trong CentOS của tôi 7, với crontabkhông cron, -scó nghĩa là selinux context.....
WesternGun

13

Thay vì dẫn mọi thứ đến /dev/null(có thể khiến bạn không có manh mối về những gì đã xảy ra nếu có sự cố), bạn có thể chuyển các tập lệnh của mình để ghi nhật ký các tệp như thế này:

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

Và để dừng nhận thư, chỉ cần đặt MAILTObiến thành một chuỗi trống ở đầu tệp crontab của bạn:

MAILTO=""

4

Nếu bạn không muốn gửi thư cho một nhiệm vụ cụ thể, bạn chỉ cần thêm >/dev/null 2>&1vào cuối dòng:

30 * * * * backup.sh >/dev/null 2>&1

Tôi chọn cách này: bạn mất dấu tất cả mọi thứ, nhưng gọn gàng.
WesternGun

0

Bạn nên thêm phần sau vào lệnh gnu tar của mình : --warning = no-file-đã thay đổi

Điều đó sẽ loại bỏ tất cả các thông báo " % s: file đã thay đổi khi chúng tôi đọc nó ". Và bằng cách sử dụng giải pháp này (và không chuyển hướng mọi thứ sang / dev / null), bạn vẫn có thể nhận được thông báo lỗi khi công cụ thực sự gặp sự cố ..


Với cờ --warning, bạn có thể bật và tắt rất nhiều thông báo khác nhau được in tar . Đây là phần có liên quan của hướng dẫn sử dụng với tất cả các từ khóa bạn có thể sử dụng: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Lưu ý: bằng cách thêm " không- " vào trước từ khóa, tin nhắn sẽ bị chặn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.