ทำไม cron.d ของฉันไม่ทำงานต่อนาที


33

ฉันขว้างปาเป้าไปหลายครั้งเพื่อพยายามรับสคริปต์ไพ ธ อนของฉันให้ทำงานทุกนาที ดังนั้นฉันคิดว่าฉันจะทำให้มันง่ายขึ้นเพื่อทำ "สิ่งที่ง่ายที่สุดที่อาจเป็นไปได้" หนึ่งครั้งต่อนาที (ฉันใช้เดเบียน / ทดสอบ)

ฉันสร้างไฟล์บรรทัดเดียวใน/etc/cron.d/perminute:

* * * * * /bin/touch /home/me/ding_dong

มันเป็นเจ้าของโดย root และสามารถเรียกใช้งานได้ (ไม่แน่ใจว่าเป็นอย่างนั้นหรือไม่) จากนั้นฉันก็:

sudo service cron reload

จากนั้นนั่งลงและเริ่มทำงานls -ltrอีกครั้งและอีกครั้งในไดเรกทอรีบ้านของฉัน ( /home/me) แต่ไฟล์ ding_dong ของฉันไม่เคยปรากฏขึ้น ฉันรู้ว่าถ้าฉันทำsudo /bin/touch /home/me/ding_dongมันจะปรากฏขึ้นทันที

เห็นได้ชัดว่าไม่มีอะไรโง่ ๆ ที่นี่


3
การโหลดเซอร์วิส cron daemon อีกครั้งเพื่อใช้การเปลี่ยนแปลงใน cron.d นั้นไม่จำเป็นเนื่องจากจะสแกนไดเร็กทอรีสำหรับไฟล์ใหม่และไฟล์ที่อัพเดตทุกนาที
Josip Rodin

คำตอบ:


45

เมื่อเพิ่มการกำหนดค่า cron ใน/etc/cron.d/หรือใน/etc/crontabคุณจะต้องเพิ่มชื่อผู้ใช้ในบริบทที่คำสั่งควรทำงานในตัวอย่างของคุณ

* * * * * root /bin/touch /home/me/ding_dong

และคำใบ้จากฉัน: คุณไม่ต้องเริ่มต้นทำงานls -ltrซ้ำแล้วซ้ำอีกเพียงแค่ใช้watch -n 5 "ls -ltr"และมันจะเรียกใช้คำสั่งทุก 5 วินาที (หรือค่าอื่น ๆ โดยแทนที่ 5 ด้วยสิ่งที่คุณต้องการ)


9
นี่ทำให้ฉันไปในทิศทางที่ถูกต้อง มันเป็นช่วงเวลาที่ขี้โกง ฉันแก้ไขแล้ว แต่ก็ยังใช้งานไม่ได้ หลังจากอ่านman cronช้าลงเล็กน้อยและให้ความสนใจเป็นพิเศษกับDEBIAN specificหัวข้อต่าง ๆ ฉันสังเกตว่าไฟล์จะต้องไม่เป็นกลุ่มหรือเขียนได้อื่น ซึ่งฉันได้เปิดใช้งานในความยุ่งยากของฉัน ณ จุดหนึ่ง
Travis Griggs

คุณไม่สามารถเปลี่ยนเจ้าของสคริปต์เป็นรูทได้หรือไม่
Geremia

บรรทัดเฉพาะนี้ช่วยฉันได้ จากman cron: นอกจากนี้ใน Debian แล้ว cron จะอ่านไฟล์ในไดเรกทอรี /etc/cron.d cron ปฏิบัติต่อไฟล์ใน /etc/cron.d เช่นเดียวกับไฟล์ / etc / crontab (เป็นไปตามรูปแบบพิเศษของไฟล์นั้น ๆ เช่นมีฟิลด์ผู้ใช้ ) อย่างไรก็ตามพวกเขาเป็นอิสระจาก / etc / crontab: พวกเขาไม่ได้สืบทอดการตั้งค่าตัวแปรสภาพแวดล้อมจากมัน การเปลี่ยนแปลงนี้มีผลเฉพาะกับเดเบียนดูบันทึกย่อภายใต้ DEBIAN SPECIFIC ด้านล่าง
harperville

ชาย 8 cron (บนเดเบียน) ยังบอกด้วยว่าไฟล์ใน /etc/cron.d/ อาจมีตัวอักษรและตัวเลขเท่านั้น '-' และ '_' โดยเฉพาะอย่างยิ่งไม่มีจุด
mpartel

3

ในการสร้างcronงานใหม่คุณควรเรียกใช้crontab -eในฐานะผู้ใช้ที่คุณต้องการใช้งาน จากนั้นเพิ่มบรรทัดที่เกี่ยวข้องในหน้าต่างตัวแก้ไขที่ปรากฏขึ้น:

* * * * * /bin/touch /home/me/ding_dong

วิธีที่คุณทำมันต้องใช้รูปแบบที่ต่างออกไปและไม่ใช่ความคิดที่ดีเลย Crontabs ใน/etc/cron.dมีรูปแบบที่แตกต่างกันเล็กน้อยพวกเขาต้องการชื่อผู้ใช้ที่จะทำงานภายใต้ ตัวอย่างเช่น:

* * * * * USERNAME /bin/touch /home/me/ding_dong

เคล็ดลับที่ดี (ตามที่แนะนำโดย @VogonPoetLaureate) คือการจับข้อผิดพลาดมาตรฐานของงาน cron ของคุณซึ่งสามารถช่วยแก้ไขข้อผิดพลาดได้ ตัวอย่างเช่น:

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error

6
ไม่มีเหตุผลที่จะบอกว่า cron.d คือ "ไม่ใช่ความคิดที่ดี" cron daemon จะส่งเอาต์พุต cron.d stderr ไปยังชื่อผู้ใช้และถ้าคุณต้องการเปลี่ยนเส้นทางไปยังที่อยู่อีเมลอื่นตัวแปร MAILTO จะพร้อมใช้งาน
Josip Rodin

@JosipRodin ไม่ใช่ความคิดที่ดีสำหรับสิ่งที่ไม่ได้ดำเนินการโดยรูทซึ่งคุณตั้งค่าไว้ มันสมเหตุสมผลสำหรับดูแลระบบบนระบบผู้ใช้หลายคน แต่ในเครื่องของคุณเองมันง่ายกว่าที่จะมีทุกอย่างใน crontab ของคุณเองดังนั้นจึงมีเพียงที่เดียวที่จะตรวจสอบและcrontab -lแสดงรายการงาน cron ทั้งหมดของคุณ
terdon

นั่นถือว่าเป็นงาน cron ส่วนตัวที่ OP ไม่ได้ชี้แจง - โดยทั่วไปมีแอปพลิเคชั่นมากมายสำหรับงาน cron ของผู้ใช้ที่ไม่มีสิทธิพิเศษตั้งค่าผ่าน cron.d เช่นทำให้พวกเขาทั้งหมดในที่เดียว ผู้ใช้บริการที่ถูกแยกการติดตั้งการใช้งานอัตโนมัตินั้นง่ายกว่า ฯลฯ
Josip Rodin

@JosipRodin อย่างแน่นอน ฉันคิดว่าเป็นระบบส่วนบุคคลเพราะ i) ระบบขององค์กรไม่ได้อยู่ที่นี่และ ii) คำถามที่แนะนำสำหรับผู้ใช้ที่ไม่ใช่ผู้เชี่ยวชาญ
terdon

ตกลงผมคิดว่าผมไม่ได้อ่านว่าเป็นเพราะความสับสนกันระหว่าง superuser และ ServerFault และเว็บไซต์ยูนิกซ์ SE :)
ซิป Rodin

2

ความผิดพลาดที่เป็นไปได้และนี่คือวิธีการที่ ไฟล์บรรทัดเดียวที่ถูกสร้างขึ้น จากเอกสารของ Ubuntu :

... สายมีห้าเขตเวลาและวันที่ตามด้วยคำสั่งตามด้วยอักขระ newline

ตัวอย่างเช่นวิธีการสร้างนี้ไม่ทำงาน:

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.