งาน Crontab เริ่มต้น +1 นาทีหลังจาก @reboot


42

ต้องการสคริปต์ที่ดำเนินการในการรีบูตในเวลา +1 นาที ฉันบันทึกไว้@rebootแต่มันเร็วเกินไปสำหรับสคริปต์ของฉัน วิธีดำเนินการบางครั้งหลังจากรีบูต?


2
ทำไมมันเร็วเกินไป ? อาจเป็นสคริปต์เริ่มต้นที่เหมาะสมกว่า (โดยเกี่ยวข้องกับการอ้างอิงเช่นสคริปต์นี้ต้องมีการตั้งค่าเครือข่ายก่อน )
sr_

สคริปต์ของฉันต้องถูกประหารชีวิตหลังจากผู้อื่นทั้งหมดคำพูดสุดท้ายสั้น ๆ
Yurij73

เนื่องจากงานของคุณจะต้องถูกดำเนินการหลังจากทุกอย่างและเนื่องจากแนวคิดของทุกอย่างค่อนข้างผันแปร (การเพิ่มแอปพลิเคชัน autostart @ reboot ใหม่นั้นไม่ใช่เรื่องแปลกมาก) ฉันคิดว่ามันขึ้นอยู่กับคุณที่จะวางงานของคุณลงในสคริปต์ rc ใน วิธีที่เซิร์ฟเวอร์วัตถุประสงค์ของคุณ การวางงานของคุณไว้ที่ด้านล่างของงานที่ระบุใน /etc/rc.local มักเป็นสิ่งที่คุณต้องการ แต่ขึ้นอยู่กับการกำหนดค่าเริ่มต้นระบบของคุณสิ่งนี้อาจไม่ถือเป็นจริงตลอดเวลา ดังนั้นทดสอบและดูว่าเหมาะกับคุณหรือไม่
MelBurslan

ฟังดูเป็นกรณีสำหรับการพุ่งพรวดหรือไม่?
nafg

คำตอบ:


64

สคริปต์ตั้งใจจะรันเพียงหนึ่งนาทีหลังจากบูตเครื่องหรือไม่หรือจะใช้ในเวลาอื่นด้วยเช่นกัน ในกรณีแรกคุณสามารถเพิ่มsleep 60ไปยังจุดเริ่มต้นของสคริปต์ของคุณหรือในกรณีหลังเพิ่มลงในไฟล์ crontab:

@reboot sleep 60 && my_script.sh

ดังที่มีการชี้ให้เห็นโดย sr_ แม้ว่าบางทีคุณอาจจะแก้ปัญหานี้ในทางที่ผิดและสคริปต์ init.d หรือ rc.d ที่เหมาะสมจะเป็นโซลูชันที่มีประสิทธิภาพมากขึ้น


1
หรือใช้ตัวเลือกบรรทัดคำสั่งเพื่อปรับการหน่วงเวลา (เช่นscript -s Xที่จะแปลsleep Xภายในสคริปต์)
เตอร์

ฉันสามารถใช้สิ่งนี้กับไฟล์ taskrunner ใน /etc/init.d/ ได้หรือไม่?
Andres Angel

@AndresAngel - ฉันขอโทษฉันไม่รู้ ฉันใช้ FreeBSD ซึ่งไม่มีtaskrunnerและสำหรับเรื่องนั้น/etc/init.d
D_Bye

ในการนอนหลับ rhel7 ของฉันไม่ทำงานเลยมันนอนหลับตลอดไปและไม่กลับมา
Inder R Singh

16

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

โดยสร้างไฟล์/etc/systemd/system/my_script.serviceด้วยเนื้อหาดังต่อไปนี้:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

จากนั้นดำเนินการ:

sudo systemctl daemon-reload
sudo systemctl enable my_script

คุณทำเสร็จแล้ว!


11

atผมจะใช้ ในขณะที่:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

... ด้วยข้อแม้ที่เพิ่มเข้ามาซึ่งหากสิ่งที่คุณต้องการจริงๆคือเรียกใช้หลังจากสิ่งอื่น ๆ ทั้งหมดคุณควรตรวจสอบวิธีการทำใน init ที่ระบบปฏิบัติการของคุณใช้อยู่

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