เพิ่มบรรทัดไปยัง cron จากสคริปต์


40

มีวิธีเพิ่มบรรทัดใน cron ของผู้ใช้ผ่านสคริปต์หรือไม่

ฉันมักจะใช้มันcrontab -eแต่ฉันต้องการที่จะทำให้งานนี้ด้วยเชลล์สคริปต์โดยอัตโนมัติ


คำตอบ:


49

คุณสามารถ echo บรรทัดในด้านล่างของผู้ใช้ปัจจุบัน crontab เช่นนี้:

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -

+1 เพราะคุณเอาชนะฉันได้ (ฉันมีข้อผิดพลาดของสคริปต์ขณะทดสอบ: D) 1 สิ่งที่คุณต้องเพิ่มฉันคิดว่า: ระบบจะต้องได้รับการแจ้งว่าcronมีการเปลี่ยนแปลง
Rinzwind

ฉันรู้ว่านี่จะเป็นการแข่งขันที่จะได้รับคำตอบ! คุณถูกต้องใน cron นั้นไม่จำเป็นต้องได้รับการแจ้งเตือน นี่คือเหตุผลที่คุณไม่สามารถสะท้อนคำสั่งไปยังจุดสิ้นสุดของ crontab ได้ ฉันได้ทดสอบว่าสคริปต์ข้างต้นทำงานและ cron เริ่มรันคำสั่ง
Richard Holloway

13
โอ้และฉันคิดว่านี่เป็นข้อผิดพลาดเช่นกันcrontabสำหรับผู้ใช้นั้นยังไม่มี (?)
Rinzwind

7
มันเตือนคุณว่าผู้ใช้ crontab ไม่มีอยู่ถ้าเป็นเช่นนั้น แต่มันจะสร้างขึ้นมา ฉัน upvoting ความคิดเห็นของคุณเป็นที่ชาญฉลาด
Richard Holloway

3

หากคุณต้องการแก้ไขค่าใน crontab ของคุณคุณสามารถทำบางสิ่งตามบรรทัดต่อไปนี้:

$ crontab -l | sed -e 's/foo/bar/' | crontab -

เห็นได้ชัดว่าคุณต้องระมัดระวังการเปลี่ยนตัวเพื่อให้แน่ใจว่าตรงกับบรรทัดที่คุณต้องการเปลี่ยนเท่านั้น มิฉะนั้นทั้งหมดfoosจะเปลี่ยนเป็นbars(ในตัวอย่างนี้)

ข้อดีของวิธีนี้คือคุณไม่ได้แทนที่ crontab ทั้งหมด (ปากคีบเปรียบเทียบมากกว่าค้อนขนาดใหญ่)

คุณสามารถใช้คำสั่งการแก้ไขใด ๆ แทนsed ตัวอย่างเช่นหากคุณต้องการใช้edเพื่อสัมผัสบรรทัดที่เริ่มต้นโดยมีลักษณะดังนี้:

2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1

สมมติว่าบรรทัดนี้เป็นหนึ่งในหลาย ๆ บรรทัดหรือคุณมี crontabs ที่แตกต่างกันมากมายเพื่ออัปเดตในระบบที่แตกต่างกันและคุณรู้เพียงว่าบรรทัดของคุณจะเป็นบรรทัดเดียวที่มีคำศัพท์flitchอยู่ในนั้น

มันอาจดูเหมือน:

$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...

ตอนนี้ผมต้องยอมรับว่าเกือบ 100% ของเวลาsedจะทำสิ่งที่เอ็ดจะทำ แต่มันเสมอดีที่จะมีเครื่องมือพิเศษในดกองทัพสวิส ^. ^

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