ตกลงดังนั้นฉันได้สร้างสคริปต์ของฉันฉันทิ้งไว้ใน/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 สิ่งนี้แก้ไขปัญหาของฉันได้เสมอ :)