วิธีรันเชลล์สคริปต์ผ่าน crontab?


22

ฉันมีnotify.shสคริปต์ที่ดูเหมือนว่า:

notify-send "hi welcome"

การแจ้งเตือน crontab ของฉันสำหรับ 2 PM:

0 14 * * * home/hacks/notify.sh

อย่างไรก็ตามวิธีนี้ใช้ไม่ได้ อะไรคือปัญหา?

คำตอบ:


39

สคริปต์ของคุณไม่มี #! บรรทัดที่จุดเริ่มต้นซึ่งเป็นเวทย์มนตร์ตีความโดยเคอร์เนลเพื่อพูดล่ามคำสั่งที่จะใช้สำหรับสคริปต์

ทำให้เป็นแบบนี้:

#!/bin/sh
notify-send "hi welcome"

และตรวจสอบให้แน่ใจว่าสคริปต์นั้นทำงานได้:

ls -l home/hacks/notify.sh
chmod +x home/hacks/notify.sh
ls -l home/hacks/notify.sh

นอกจากนี้เนื่องจากคุณกำลังขอให้สิ่งนี้เกิดขึ้นวันละครั้งเขตเวลาของ crontab จะเหมือนกับเขตเวลาของคุณหรือไม่ คุณอาจพบสิ่งนี้เกิดขึ้นเวลา 14.00 น. GMT


+1 คำตอบนี้ยอดเยี่ยมโดยเฉพาะอย่างยิ่งเมื่อสังเกตถึงจุดที่สคริปต์ต้องใช้งานได้! ขอบคุณ!
FXQuantTrader

คำอธิบายที่ลึกซึ้งมาก My upvote
Fokwa ที่ดีที่สุด

18

การทำให้ crontab ทำงานได้ง่ายเท่านั้น ที่นี่ฉันจะบอกวิธีการใช้งาน crontab มันมีประโยชน์สำหรับทุกคนที่ติดอยู่บน crontab

*/1 * * * * cd /home/hacks && sh notify.sh

เพื่อให้สคริปต์เรียกใช้งานได้เราต้องทำ:

chmod +x home/hacks/notify.sh

ที่นี่ฉันเรียกใช้สคริปต์นี้ทุก ๆ นาที ... โดยทำสคริปต์ด้านล่างคุณสามารถเขียนลงในไฟล์บันทึกเพื่อค้นหาว่ามันทำงานหรือไม่

เขียนบันทึก

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log

ส่งอีเมล์

*/1 * * * * cd /home/hacks && sh notify.sh>>test.log | mail -s "Hi this is example" user@domain.com

2
ไม่ใช่ว่า "* / 1 * * * * sh /home/hacks/notify.sh" จะใช้งานได้เช่นกัน?
user1179459

5

4 สมมติฐาน:

  • cron daemon ไม่ทำงาน (ทำps axfww | grep cronและตรวจสอบ)

  • การแจ้งเตือนการส่งกำลังพยายามส่งเอาต์พุตไปยังเทอร์มินัลหรือเซสชัน X - แต่จะถูกเรียกใช้จากภายในcronสภาพแวดล้อมและไม่ทราบว่า "ใครจะพูดกับ" เพื่อพูด

  • สคริปต์ของคุณไม่สามารถเรียกใช้งานได้

  • home/เส้นทางในสคริปต์ crontab เป็นญาติกับผู้ใช้สคริปที่ได้รับการดำเนินการตาม ลองใช้เส้นทางแบบเต็ม


1

เพิ่มexport DISPLAY=:0เหนือบรรทัดการแจ้งเตือน - ส่งในสคริปต์ของคุณ ที่อยู่นี้เป็นจุดที่สองของ lornezog


0

คุณต้องเปิด crontab โดยใช้คำสั่งต่อไปนี้:

crontab -u username -e (to edit) -l(to list) -r(to remove) 10(minutes) 8-15(hours) *(Day of month) *(month) 1,3,5(days of week) /path/to/script/script_name.sh

สิ่งนี้จะเรียกใช้สคริปต์ของคุณหนึ่งครั้งต่อชั่วโมงตั้งแต่ 8.00 น. ถึง 15.00 น. เวลา 10 นาทีที่ผ่านมาทุกวันจันทร์วันพุธและวันศุกร์


0

แรกของทั้งหมดที่เราต้องแก้ไข crontab ที่มีคำสั่งcrontab -eและกว่าภายในนี้เพิ่มเส้นทางของการปฏิบัติการสคริปต์และในกรณีของคุณเช่นนี้Crontab * 14 * * * home/hacks/notify.sh >/dev/null 2>&1

เริ่ม / หยุด / เริ่มบริการ cron

  • /etc/init.d/crond start /stop / restart
  • service crond start /stop /restart
  • systemctl stop crond.service

systemctl หยุด crond.service


-2

ค่อนข้างง่ายเพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์ crontab ผ่าน: sudo nano /etc/crontab

@reboot root cd /home/pi/node-sonos-http-api && npm start &


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