Score:0

ไม่สามารถทำให้ crontab ทำงานตามที่คาดไว้

ธง id

ฉันต้องการสำรองโฮมไดเร็กตอรี่ทุกวันโดยใช้สคริปต์ต่อไปนี้ (ฉันสามารถเขียนไปที่ /home):

   #!/bin/sh -e
   ซีดี /โฮม
   ls -l 
   rm -f silbar.tar.gz
   echo "น้ำมันดินเริ่มต้น"
   tar -czf silbar.tar.gz ซิลบาร์
   ซีดี ./silbar
   echo "เสร็จสิ้นด้วย tar"
   เสียงบี๊บ

ในการทำเช่นนั้น ฉันสร้างไฟล์ crontab ส่วนตัวโดย enter ~$ crontab -e และเพิ่มสิ่งต่อไปนี้ (และเฉพาะบรรทัดที่ไม่ใช่ความคิดเห็น)

30 6 * * * mybackup.script 

สมมติว่า crontab ของฉันจะทำงานในโฮมไดเร็กตอรี่ของฉัน

แต่ไม่มีอะไรเกิดขึ้น กำลังทำ ~$ grep CRON /var/log/syslog แสดง นอกเหนือจากสิ่งที่รูท ข้อผิดพลาดต่อไปนี้:

30 ส.ค. 06:30:01 Puma CRON[100126]: (silbar) CMD (mybackup.script )

30 ส.ค. 06:30:01 Puma CRON[100125]: ข้อมูล (CRON) (ไม่ได้ติดตั้ง MTA ทิ้งเอาต์พุต)

แล้วฉันทำอะไรผิด? MTA คืออะไรกันแน่?

user535733 avatar
cn flag
สคริปต์ของคุณมีข้อผิดพลาด เราไม่รู้ว่าข้อผิดพลาดคืออะไร Cron พยายามส่งอีเมลข้อความแสดงข้อผิดพลาดถึงคุณ แต่ระบบของคุณไม่ได้ตั้งค่าไว้ แทนที่จะบ่นเรื่องการตั้งค่า MTA สำหรับ cron เพียงแค่เปลี่ยนเส้นทางเอาต์พุตข้อผิดพลาดไปยังไฟล์เพื่อให้คุณอ่านได้
user535733 avatar
cn flag
ตัวอย่าง: `30 6 * * * /home/silbar/mybackup.script > /home/silbar/backup.log 2>&1`
cn flag
โปรดอย่าใช้ /home สำหรับไฟล์ส่วนบุคคล สิ่งเดียวที่ควรเป็นไดเร็กทอรีผู้ใช้ วางไว้ที่อื่น ไม่เคยใส่มากกว่า 1 บ้านในไฟล์ tar; ใช้ 1 ไฟล์ต่อ /home/USER/ และวางไว้ใน /home/USER (พิจารณาว่า "แนวทางปฏิบัติที่ดีกว่า") เป็นการละเมิดความลับหากคุณไม่ และใช้เส้นทางสัมบูรณ์เสมอเมื่อใช้ cron เป็นวิธีที่ปลอดภัยที่สุด ไม่จำเป็นต้องใช้ "rm" "tar" เขียนทับโดยค่าเริ่มต้นโดยไม่ต้องถาม
Score:1
ธง cn

คุณอาจต้องป้อนเส้นทางแบบเต็มของสคริปต์ใน cronjob

Cronjobs ทำงานในสภาพแวดล้อมที่เกือบจะว่างเปล่า ดังนั้นจึงอาจไม่พบไฟล์เรียกทำงาน เช่นเดียวกับคำสั่งในสคริปต์: ระบุเส้นทางแบบเต็มไปยังคำสั่ง หรือตั้งค่าตัวแปร PATH ในสคริปต์ของคุณ

Score:0
ธง id

ว้าว! คำตอบที่มีประโยชน์มากจากผู้ใช้ 535733, Rinzwind, Vanadium และ waltinator ตอนนี้ฉันทำงานตามที่แนะนำโดยใช้ bash และเส้นทางแบบเต็ม ตอนนี้การสำรองข้อมูลไปที่แฟลชไดรฟ์ (ซึ่งเป็นที่ที่ฉันต้องการให้ไป) แทนที่จะเป็น /home

ขอบคุณทุกคนดิ๊ก

Score:0
ธง it

โดยเริ่มด้วย #!/bin/sh -eคุณทำให้สคริปต์ของคุณทำงานด้วย (ทุบตีIMHO ดีกว่า) และ -e ออกจากข้อผิดพลาดใด ๆ (ชุดผู้ชาย) ดังนั้นจึงไม่สามารถจัดการกับข้อผิดพลาดได้ สคริปต์ของคุณล้มเหลว และ ครอน กำลังพยายามส่งอีเมลบันทึกถึงคุณ ครอน ไม่พบ Message Transfer Agent (MTA) อีเมลไม่ได้รับการกำหนดค่าในระบบของคุณ แม้กระทั่งสำหรับการจัดส่งในพื้นที่

งานวิ่งผ่าน ครอน, หรือ ระบบ สคริปต์เริ่มต้นใช้งานไม่ได้ทำงานในสภาพแวดล้อมรันไทม์เดียวกันกับที่คุณมีบนเดสก์ท็อป ระบบ สคริปต์เริ่มต้นทำงานเป็น ราก. ไม่มีของคุณ เส้นทาง การเปลี่ยนแปลงหรือการตั้งค่าตัวแปรสภาพแวดล้อมอื่นๆ จาก ~/.bashrc จะถูกเผยแพร่ไปยังคุณโดยอัตโนมัติ ครอน งาน. ตัวอย่างเช่นไม่มี $จอแสดงผลดังนั้นโปรแกรม GUI จึงต้องการการดูแลเป็นพิเศษ (อ่าน ผู้ชาย xhost).

หนึ่งสามารถตั้งค่าตัวแปรสภาพแวดล้อมสำหรับทุกคน ครอน งานใน crontab ไฟล์ อ่าน ผู้ชาย 5 crontab.

ดูผลลัพธ์ของ echo "=== id ===;id;echo "=== ชุด ==";set;echo "=== env ==";env | sort;echo "=== นามแฝง ===";นามแฝง ในแต่ละสภาพแวดล้อมของคุณ

ตั้งแต่ สั่งการ ส่วนหนึ่งของ crontab บรรทัดถูกตีความโดยค่าเริ่มต้น /ถัง/shซึ่งมีไวยากรณ์ที่ง่ายกว่า /ถัง/ทุบตีฉันขอแนะนำให้มี สั่งการ เป็นสายไปยัง ทุบตี สคริปต์ (ปฏิบัติการ, เมาต์, ขึ้นต้นด้วย #!/bin/bash) ซึ่งตั้งค่าสภาพแวดล้อมแล้วเรียกใช้โปรแกรมที่ต้องการ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา