ตกลงดังนั้นฉันได้สร้างสคริปต์ของฉันฉันทิ้งไว้ใน/etc/cron.hourly
นั้นฉันchmod 777
ไฟล์ แต่มันจะไม่ทำงาน (โดยอัตโนมัติ) ถ้าฉันรันด้วยตนเองมันก็ใช้ได้ดี ฉันต้องทำอะไรอีกหรือไม่
ตกลงดังนั้นฉันได้สร้างสคริปต์ของฉันฉันทิ้งไว้ใน/etc/cron.hourly
นั้นฉันchmod 777
ไฟล์ แต่มันจะไม่ทำงาน (โดยอัตโนมัติ) ถ้าฉันรันด้วยตนเองมันก็ใช้ได้ดี ฉันต้องทำอะไรอีกหรือไม่
คำตอบ:
ทำไมไม่ใช้ crontab (/ etc / crontab) และใช้ * / 1 ในฟิลด์ชั่วโมง ฉันใช้สิ่งนี้เพื่อเรียกใช้สคริปต์ทุก 5 นาทีและทำงานได้ดี:
# m h dom mon dow user command
* */1 * * * user command
cron.daily
และเพื่อน ๆ จะทำงานได้ดีขึ้นเล็กน้อยหากเครื่องไม่ทำงานตลอดเวลาเพราะ anacron พยายามประมาณตารางเวลาที่ถูกต้องในขณะที่ cron ธรรมดาจะไม่ทำงานหากเครื่องไม่ทำงานตลอดทั้งคืน สำหรับงานประจำชั่วโมงนี้อาจไม่สำคัญมากนัก
/etc/crontab
: cron.daily
, cron.weekly
และcron.monthly
ทำงานกับ anacron (ถ้ามี) run-parts --report /etc/cron.hourly
แต่รายชั่วโมง
รายการcron.hourly
จะดำเนินการโดยกลไกการทำงานของชิ้นส่วน ( man run-parts
สำหรับข้อมูลเพิ่มเติม) และเลือกrun-parts
ได้ว่าชื่อไฟล์ใดที่ถือว่าใช้ได้
ตัวอย่างเช่นการให้สคริปต์ส่วนขยายของคุณจะทำให้มันไม่ถูกต้องและส่งผลให้งานไม่ได้ทำงาน [a-zA-Z0-9_-]
เป็นอักขระที่ถูกต้องดังนั้น '.' ทำให้มันไม่ถูกต้อง
เมื่อเพิ่มงานลงใน/etc/cron.hourly
(หรือ.daily
, .weekly
ฯลฯ ) ให้ทดสอบในภายหลังเสมอว่าrun-parts
จะรันโดยการออกคำสั่ง:
run-parts --test /etc/cron.hourly
หากเรียกใช้คำสั่งนี้จะแสดงไฟล์ของคุณหมายความว่าทำงานได้ มิฉะนั้นหากไม่แสดงชื่อไฟล์ของคุณไม่ถูกต้อง
สคริปต์ของคุณชื่ออะไร
giving your script an extension will make it invalid and result in the job not being run
--report
เพื่อเรียกใช้สคริปต์จริง
ปัญหาของคุณอาจเป็นไปตามการอนุญาตที่เปิดมากเกินไปซึ่งอนุญาตให้ใครก็ตามแก้ไขไฟล์ของคุณได้ ลอง755
แทน
การดูรายการ cron ในเอาต์พุต syslog ของคุณควรยืนยันสิ่งนี้
คำตอบของ DaithiF ควรเป็นคำตอบที่ถูก
นอกจากนี้สคริปต์ของฉันไม่ได้#!/bin/bash
อยู่ในบรรทัดแรก แม้ว่าสคริปต์จะสามารถดำเนินการกับบรรทัดคำสั่งได้ แต่run-parts
ก็ปฏิเสธว่า "ข้อผิดพลาดการจัดรูปแบบ Exec"
การเปลี่ยนชื่อไฟล์จากscriptname.sh
เป็นscriptname
และเพิ่ม#!/bin/bash
เข้าไปในบรรทัดแรกทำให้สคริปต์ของฉันทำงานทุกชั่วโมง
เมื่อคุณวิ่ง
crontab -l
งานนี้อยู่ในรายการหรือไม่
ถ้าไม่เพิ่ม
crontab -e
เพิ่มบรรทัดนี้
0 * * * * yourScript
หากอยู่ในรายการนี้ให้ลองเพิ่มเส้นทางของภาษาโปรแกรมไปยังด้านบนของสคริปต์ของคุณ
ตัวอย่าง:
bash: #!/bin/bash
2 สิ่งนี้แก้ไขปัญหาของฉันได้เสมอ :)