มีวิธีเพิ่มบรรทัดใน cron ของผู้ใช้ผ่านสคริปต์หรือไม่
ฉันมักจะใช้มันcrontab -e
แต่ฉันต้องการที่จะทำให้งานนี้ด้วยเชลล์สคริปต์โดยอัตโนมัติ
มีวิธีเพิ่มบรรทัดใน cron ของผู้ใช้ผ่านสคริปต์หรือไม่
ฉันมักจะใช้มันcrontab -e
แต่ฉันต้องการที่จะทำให้งานนี้ด้วยเชลล์สคริปต์โดยอัตโนมัติ
คำตอบ:
คุณสามารถ echo บรรทัดในด้านล่างของผู้ใช้ปัจจุบัน crontab เช่นนี้:
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
cron
มีการเปลี่ยนแปลง
crontab
สำหรับผู้ใช้นั้นยังไม่มี (?)
หากคุณต้องการแก้ไขค่าใน 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จะทำสิ่งที่เอ็ดจะทำ แต่มันเสมอดีที่จะมีเครื่องมือพิเศษในดกองทัพสวิส ^. ^