กำลังรันคำสั่งเมื่อเริ่มต้นบน crontab


24

ฉันต้องการรันคำสั่งบน linux ของเราหลังจากรีบูตเครื่องเสร็จฉันเห็นว่าสามารถใช้ crontab ได้ ฉันต้องการเรียกใช้คำสั่งนี้

sudo ifdown eth0 && sudo ifup -v eth0

บน crontab ฉันทำได้แค่:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

หรือฉันจำเป็นต้องจัดเก็บไว้ในสคริปต์?

ขอขอบคุณ


7
Crontab ดูเหมือนว่าเป็นเครื่องมือที่ผิดสำหรับการรีสตาร์ท eth0 ทำไมไม่ใส่คำสั่งนั้น (โดยไม่มี sudo) ใน /etc/rc.local
เล็ก ๆ น้อย ๆ ที่

คุณต้องทำอะไรเพื่อ งานเหล่านี้มักจะทำโดยอัตโนมัติในระหว่างกระบวนการบูตและเกือบจะไม่จำเป็นต้องทำงานแยกต่างหากจากกระบวนการบู๊ตอัตโนมัติ ...
Thomas Ward

1
@ mikewhething ฉันไม่สามารถ upvote ในขณะนี้ แต่เพียงต้องการขอบคุณที่แนะนำ
Lottie

คำตอบ:


34

หมายเหตุเล็กน้อยก่อนหน้านี้จะใช้งานได้:

  1. อย่าใช้sudoในงาน cron แทนที่จะแก้ไขroot's crontab แทนของคุณเองเช่นนั้นป้อนคำสั่งโดยไม่ต้องsudo crontab -esudo
  2. ตามที่ @ มิกกี้สิ่งที่กล่าวมานี่เป็นการใช้งานที่แปลกสำหรับcronและน่าจะถูกวางไว้ที่ดีกว่า/etc/rc.localก่อนที่จะexit 0สาย
  3. หากคุณบอกเราอย่างชัดเจนว่าคุณกำลังมองหาอะไรเราอาจจะนำคุณไปยังบันทึกหรือตัวเลือกการกำหนดค่า (การรีสตาร์ทบริการเครือข่ายของคุณเมื่อเริ่มต้นจะรู้สึกแฮ็คเล็กน้อย)
  4. ในระบบส่วนใหญ่@rebootควรทำงานหลังจากปิดระบบอย่างหนักหรือเกิดความผิดพลาด แต่มีการใช้ cron ต่างกันดังนั้น YMMV ฉันเห็นความคิดเห็นในที่ต่าง ๆ ที่ยืนยันทั้งสองอย่าง

แก้ไข (2016/02/17): ลบประกาศแจ้งความไม่ถูกต้องบนเส้นทางที่แน่นอน; kudos @muru
EDIT (2016/10/17): เพิ่มบันทึกการปิด
แก้ไข EDIT (2017/09/11): บันทึกการปิดปรับปรุง ไม่แน่ใจจริงๆ


ตกลงเพียงต้องการชี้แจงฉันควรเขียนคำสั่งเต็มบนetc/rc.localโดยไม่ต้อง sudo ดังนั้นมันจะเป็นแค่ ifdown eth0 && sudo ifup -v eth0 exit 0
Lottie

cronใช้PATHได้รับในการที่จะมี/etc/environment /sbin
muru

ฉันทำสิ่งที่ @mikewhething แนะนำและใช้งานได้ ขอบคุณ
Lottie

1
@TheSchwa ควรจะเป็น อย่างน้อยตั้งแต่ 12.04 /etc/pam.d/cronโหลดpam_envดังนั้น/etc/environmentควรอ่านและPATHตั้งค่าเริ่มต้นที่ใช้ คำตอบนั้นโพสต์ก่อน 12.04 ออกมา
muru

2
@TheSchwa คำสั่งว่าการรีบูตของ cron ไม่ได้ทำงานในการบูตเย็นผิด เส้นที่มีการรีบูตเมื่อ crond daemon เริ่มทำงาน, ช่วงเวลา นั่นคือไม่ว่าจะเป็นการบูตที่อบอุ่น, การบูตเย็นหรือว่าไม่มีการบูตและฉันเพิ่งปิด crond ด้วยตนเองและเริ่มต้นอีกครั้ง crond daemon ไม่ทราบหรือไม่สนใจว่าเหตุใดจึงเริ่มต้นใหม่มันจะเรียกใช้สายการรีบูตเมื่อใดก็ตามที่ทำ
Kurt Fitzner

6

คุณสามารถใช้ crontab สำหรับสิ่งนี้ได้ แต่ถ้าคุณใช้sudoคุณจะต้องมีNOPASSWDกฎในsudoersการทำเช่นนั้น (ดูวิธีการรันงาน cron โดยใช้คำสั่ง sudo )

มันจะง่ายกว่าในการแก้ไข/etc/rc.localและเพิ่มคำสั่งเหล่านี้ก่อนexit 0บรรทัด

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