วิธีรันงาน cron เพียงครั้งเดียว


14

ฉันมีงานที่ทำตลอดไปในขณะที่เริ่ม ดังนั้นฉันต้องการเริ่มเพียงครั้งเดียวหลังจากป้อนลงในไฟล์ "crontab -e" และบันทึก (หรือ) เมื่อใดก็ตามที่รีบูตเกิดขึ้น

ทำอย่างไรจึงจะได้สิ่งนี้?

คำตอบ:


22

หากคุณต้องการให้คำสั่งรันครั้งเดียวในภายหลังให้ใช้atคำสั่ง

หากคุณต้องการให้คำสั่งรันครั้งเดียวเมื่อบูตระบบโซลูชันที่ถูกต้องก็คือใช้งาน:

  • สคริปต์ระบบ RC (/etc/rc.local)
  • crontab พร้อม@rebootคำนำหน้าพิเศษ (ดู manpage)

หลังเป็นตัวเลือกเดียวสำหรับผู้ใช้ที่ไม่ใช่รูท


2
+1 สำหรับการกล่าวถึง @reboot
Alex Holst

ฉันมักจะชอบใช้ /etc/rc.local ถ้าเป็นไปได้ ... ฉันสงสัยว่า @reboot จริงจะรันคำสั่งในการเริ่มต้น crond ไม่ใช่บูตระบบ ความแตกต่างที่ลึกซึ้ง แต่เป็นไปได้
MikeyB

สมมติว่าฉันป้อน @reboot "cmd ............. " ลงในไฟล์ crontab และบันทึกไว้ คำสั่งนี้จะเริ่มหรือไม่ (หรือ) มันจะเริ่มหลังจากรีบูตหรือไม่
พระราม Vadakattu

ลองและดู :) สิ่งที่คุณอาจต้องทำคือใส่ลงใน crontab จากนั้นกำหนดเวลาสำหรับการดำเนินการทันทีโดยใช้at now
MikeyB

คำตอบที่ดี. @rebootฉันมักจะลืมเกี่ยวกับ
Bill Weiss

9

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


1
คุณสามารถใช้ rc.local คำสั่งใน /etc/rc.local "จะถูกดำเนินการหลังจากสคริปต์ init อื่น ๆ ทั้งหมดคุณสามารถใส่ข้อมูลการเริ่มต้นของคุณเองใน rc.local หากคุณไม่ต้องการทำสิ่ง init Sys V แบบเต็ม"
โจ

โจ: โทรดี
Bill Weiss

จะหยุดกระบวนการที่เริ่มต้นด้วยคำสั่ง at ได้อย่างไร? (ฉันรู้ว่า id กระบวนการฆ่าหลังจากเห็นรายการรหัสกระบวนการโดยใช้ "คำสั่ง ps" ทำงานสำหรับ "ที่คำสั่ง" ยัง) การสร้างสคริปต์ที่กำหนดเองง่ายหรือไม่
พระราม Vadakattu

ใช่ทั้งคู่ กระบวนการทั้งหมดสามารถหยุดได้โดยใช้kill(สมมติว่าคุณได้รับอนุญาตให้ทำเช่นนั้นซึ่งคุณทำเพื่อกระบวนการของคุณเอง) การสร้างสคริปต์เริ่มต้นนั้นง่ายมาก ดูใน/etc/init.d/บทที่ไม่ยาวมากและคุณรุ่นหลังมันหรือ google making init scripts (your distribution)หา
Bill Weiss

1
distros จำนวนมากมีสคริปต์โครงกระดูก ( /etc/init.d/skeletonใน openSuSE) ที่คุณสามารถปรับให้เข้ากับการใช้งานของคุณ
MikeyB

3

งานที่รันเพียงครั้งเดียวและทำงานตลอดไปจนกระทั่งคุณบอกให้ตายจะเรียกว่า "daemon" โดยปกติจะเริ่มผ่านสคริปต์ init ใน /etc/init.d/

หากงานของคุณสิ้นสุดลงในบางจุดและถือได้ว่าเป็นงานที่ต้องทำครั้งเดียวคุณอาจต้องการดูคำสั่ง at เช่นถ้าฉันต้องการเรียกใช้คำสั่ง find เวลา 22.00 น. คืนนี้และจะทำแค่ครั้งเดียวเท่านั้น:

$ at 10PM
at> find /root > /root/find_results.list
at> <EOT>
job 3 at 2010-02-10 22:00

1

ดูที่คำสั่ง at


จะเกิดอะไรขึ้นเมื่อระบบรีบูต? ฉันต้องใส่คำสั่ง "at command" อีกครั้งหรือไม่
พระราม Vadakattu

รายการคำสั่ง at จะไม่สูญหายระหว่างการรีบูต ibm.com/developerworks/linux/library/l-job-scheduling.htmlเป็นการแนะนำที่น่าสนใจเกี่ยวกับการจัดตารางงาน
Dominik

@Rama Vadakattu: "รายการคำสั่ง at จะไม่สูญหายระหว่างการรีบูต" ... ที่ยังไม่ได้ดำเนินการ ดูคำตอบของ MikeyB
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

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