ทำให้คำสั่งรันทุก ๆ ชั่วโมง


12

ฉันมีดรรชนีสำหรับสฟิงซ์และฉันต้องการให้มันรันทุก ๆ ชั่วโมงใน linux ฉันจะทำสิ่งนี้ได้อย่างไร

linux 

คำตอบ:


14

เนื่องจากคนอื่นโพสต์คำตอบสั้น ๆ ฉันคิดว่าฉันจะอธิบายได้มากกว่านี้เล็กน้อย ...

cron เป็น daemon ที่พบในระบบ * nix ส่วนใหญ่ที่รันคำสั่งที่กำหนดเวลาไว้ในช่วงเวลาที่ระบุ

คุณเพิ่มสคริปต์ลงในรายการโดยคัดลอกไปยังโฟลเดอร์ที่คุณเลือก:

  • cron.daily
  • cron.hourly
  • cron.monthly
  • cron.weekly

โดยทั่วไปโฟลเดอร์เหล่านี้จะอยู่ใน/etcโฟลเดอร์


2
cron. * โฟลเดอร์เฉพาะเจาะจงมาก distro crontab เป็นวิธีสากลในการให้ไอเท็มดำเนินการโดย cron ในช่วงเวลาที่กำหนด
MDMarra

จริง ฉันแค่ยกตัวอย่าง crontab ช่วยให้คุณควบคุมได้มากขึ้น
นาธานออสมัน


7

เพียงเพื่อจะแตกต่าง -

ขึ้นอยู่กับความต้องการของคุณคุณสามารถใช้คำสั่ง watch

  watch --interval=3600 command

1
สิ่งนี้รันคำสั่งทุก 1 ชั่วโมงหรือไม่ หรือมันรันคำสั่งรอ 1h แล้วเรียกใช้อีกครั้ง? หมายเหตุมันสร้างความแตกต่างที่ดีหากคำสั่งใช้เวลานานมาก (ฉันถามเพราะมันไม่ชัดเจนจากหน้าคน)
Malabarba

ไม่ยากเลยที่จะลองด้วยตัวเอง
mimoralea


2

คุณจะแก้ไขไฟล์ cron โดยป้อนคำสั่ง crontab -e

ซึ่งจะนำคุณไปสู่เครื่องมือแก้ไข 'vi' (สำหรับ Linux และ FreeBSD ปัจจุบัน)

จากนั้นป้อนข้อมูลต่อไปนี้: (พิมพ์ 'i' เพื่อแทรก)

00 * * * * /path/to/sphinx_indexer.exe

จากนั้นบันทึกและออก (กด 'esc' แล้วพิมพ์ต่อไปนี้)

:wq



1

หากคุณต้องการมันนาน ๆ ครั้งไม่ถาวรเหมือนกับที่คุณได้รับcronและwatchวิธีแก้ปัญหานั้นไม่ยืดหยุ่นพอคุณสามารถใช้สคริปต์ bash แบบเก่าได้:

while true; do
   # do stuff
   sleep $[60 * 60]
done

สิ่งนี้จะไม่ทำงานเหมือน #do Stuff หากใช้เวลา 3599 วินาทีในการดำเนินการและตามข้อกำหนดที่สคริปต์ต้องเรียกวินาทีต่อไปบนวอร์ดและรีเซ็ตนาฬิกาเป็น 0 แต่ในกรณีนี้มันจะหยุดที่ 3599 วินาทีและ จากนั้นเข้าสู่โหมดสลีปอีก 3600 วินาทีถัดไป จะไม่มีการทับซ้อน แต่มีช่องว่างที่ไม่คาดคิดระหว่างการวนซ้ำ ที่นี่ฉันคิดว่าผู้ใช้พยายามที่จะทำงานทุกชั่วโมงโดยไม่ต้อง cron
mannoj

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