หยุด cron ส่งอีเมลสำหรับสคริปต์สำรองหรือไม่


13

ฉันได้ตั้งสคริปต์สำรองเพื่อสำรองข้อมูลโลกบนเซิร์ฟเวอร์ Minecraft ของฉันทุกชั่วโมงโดยใช้ cron แต่เนื่องจากโลกถูกแก้ไขโดยผู้เล่นตลอดเวลา tar จึงบอกฉันว่าไฟล์มีการเปลี่ยนแปลงในขณะที่อ่าน ฉันเพิ่ม --ignore-command-error ไปที่ tar ในสคริปต์และหยุดข้อผิดพลาดเมื่อฉันเรียกใช้ด้วยตนเอง แต่ cron ยังคงส่งข้อความอีเมลแจ้งว่าไฟล์ถูกเปลี่ยนแปลงในขณะที่อ่านและจบลงด้วยน้ำท่วมอีเมลของฉัน วิ่งครั้งละหนึ่งชั่วโมง ใครรู้วิธีแก้ไขปัญหานี้ นี่คือสคริปต์:

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

คำตอบ:


22

Cron จะพยายามส่งอีเมลที่มีเอาต์พุตใด ๆ ที่อาจเกิดขึ้นเมื่อรันคำสั่ง จากหน้าคนของ cron:

เมื่อดำเนินการคำสั่งเอาต์พุตใด ๆ จะถูกส่งไปยังเจ้าของ crontab (หรือไปยังผู้ใช้ที่ระบุในตัวแปรสภาพแวดล้อม MAILTO ใน crontab หากมีอยู่) เอาต์พุตงานใด ๆ ยังสามารถส่งไปยัง syslog โดยใช้อ็อพชัน -s

ดังนั้นเพื่อปิดการใช้งานที่เฉพาะเจาะจงสำหรับรายการ crontab /dev/nullเพียงจับภาพทั้งหมดของการส่งออกคำสั่งอย่างใดอย่างหนึ่งและตรงไปยังไฟล์หรือ

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

1
D: ใช้ตัวอย่างของฉัน!
Braiam

@Braiam - ขอโทษที่ฉันรู้สึกขี้เกียจและไม่รู้สึกอยากพิมพ์มันขึ้นมา ฉันจะพิมพ์สิ่งเดียวกันต่อไป 8-)
slm

@Braiam - ดีกว่าเหรอ? 8-)
slm

ใช้งานได้ดีสิ่งที่ฉันกำลังมองหา
คาร์เตอร์

ทราบว่าใน CentOS 7 ของฉันด้วยcrontabไม่ได้cron, -sวิธีselinux context.....
WesternGun

13

แทนที่จะทำทุกอย่างให้เป็นท่อ/dev/null(ซึ่งอาจทำให้คุณไม่ทราบว่าเกิดอะไรขึ้นถ้ามีอะไรผิดพลาด) คุณสามารถไพพ์สคริปต์ของคุณเพื่อบันทึกไฟล์ดังนี้:

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

และหากต้องการหยุดรับอีเมลเพียงตั้งค่าMAILTOตัวแปรเป็นสตริงว่างที่จุดเริ่มต้นของไฟล์ crontab ของคุณ:

MAILTO=""

4

หากคุณไม่ต้องการอีเมลสำหรับงาน cron เฉพาะคุณสามารถเพิ่ม>/dev/null 2>&1ที่ส่วนท้ายของบรรทัด:

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

ฉันเลือกวิธีนี้: คุณหลงลืมทุกอย่าง แต่อย่างเรียบร้อย
WesternGun

0

คุณควรเพิ่มสิ่งต่อไปนี้ในคำสั่งgnu tarของคุณ: --warning = no-file-change

สิ่งนี้จะระงับข้อความ " % s: file ที่เปลี่ยนแปลงเมื่อเราอ่าน " และด้วยการใช้โซลูชันนี้ (และไม่เปลี่ยนเส้นทางทุกอย่างไปที่ / dev / null) คุณจะยังสามารถรับข้อความแสดงข้อผิดพลาดเมื่อสิ่งผิดปกติจริงๆ ..


ด้วย- การตั้งค่าสถานะคุณสามารถเปิดใช้งานและปิดใช้งานข้อความที่แตกต่างกันจำนวนมากที่tarพิมพ์ นี่คือส่วนที่เกี่ยวข้องของคู่มือที่มีคำหลักทั้งหมดที่คุณสามารถใช้: https://www.gnu.org/software/tar/manual/html_section/tar_27.html

หมายเหตุ: โดยการเพิ่ม " ไม่ - " หน้าคำหลักข้อความจะถูกระงับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.