ฉันมีสคริปต์ที่ต้องใช้งานทุกห้าวินาที ฉันรู้ว่าcron
สามารถทำงานได้ทุกนาที แต่มีวิธีรันบางอย่างทุกวินาทีหรือไม่
sleep 5
หยุดชั่วคราว (อาจอยู่ในวงวน) เป็นเวลา 5 วินาที) ... ?
ฉันมีสคริปต์ที่ต้องใช้งานทุกห้าวินาที ฉันรู้ว่าcron
สามารถทำงานได้ทุกนาที แต่มีวิธีรันบางอย่างทุกวินาทีหรือไม่
sleep 5
หยุดชั่วคราว (อาจอยู่ในวงวน) เป็นเวลา 5 วินาที) ... ?
คำตอบ:
Cron อนุญาตอย่างน้อยหนึ่งนาที สิ่งที่คุณสามารถทำได้คือเขียนเชลล์สคริปต์ด้วยการวนซ้ำไม่สิ้นสุดที่รันภารกิจของคุณจากนั้นพักเป็นเวลา 5 วินาที ด้วยวิธีนี้งานของคุณจะถูกเรียกใช้มากหรือน้อยทุก 5 วินาทีขึ้นอยู่กับระยะเวลาของงาน
#!/bin/bash
while true; do
# Do something
sleep 5;
done
คุณสามารถสร้างไฟล์ที่มีเนื้อหาดังกล่าวข้างต้นและเรียกมันด้วยmy-task.sh
sh my-task.sh
เป็นทางเลือกคุณสามารถกำหนดค่าด้วยsupervisor
เป็นบริการเพื่อที่จะเริ่มเมื่อระบบบูท ฯลฯ
มันฟังดูเหมือนว่าคุณกำลังทำสิ่งที่คุณไม่ควรทำ นี้รู้สึกผิด
คุณสามารถมีcron
สคริปต์เริ่มงานทุกนาทีที่เริ่มต้นกระบวนการที่พื้นหลัง 12 กระบวนการดังนั้น:
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
อย่างไรก็ตามคำถามของฉันคือEARTHคุณสามารถทำอะไรได้บ้างที่จะต้องวิ่งทุก 5 วินาที?
/media
ไดเรกทอรีซ้ำ ๆสำหรับไดรฟ์ที่ฉันเสียบเข้ากับ usb สำหรับการสำรองข้อมูลอัตโนมัติ ...
What on EARTH
- สถิติการรวบรวมขยะการซิงค์ไฟล์สถานะออนไลน์คุณตั้งชื่อ
เพียงใช้ลูป:
while true ; do ./your-script & sleep 5; done
สิ่งนี้จะเริ่มต้นสคริปต์ของคุณเป็นงานพื้นหลังนอนเป็นเวลา 5 วินาทีแล้ววนซ้ำอีกครั้ง คุณสามารถใช้ Ctrl-C เพื่อยกเลิกหรือใช้เงื่อนไขอื่นแทนtrue
เช่น! test -f /tmp/stop-my-script
วนซ้ำในขณะที่/tmp/stop-my-script
ไม่มีไฟล์อยู่
bash: syntax error near unexpected token ';'
ดังนั้นฉันเอามันออก ฉันทุบตี 4.3.11 คำสั่งของฉันทำงานได้อย่างรวดเร็วดังนั้นมันก็โอเคถ้ามันทำงานในเบื้องหน้า
./your-script
ที่จะทำงานในพื้นหลัง (ในระหว่างการนอนหลับ 5 วินาที) คุณสามารถเก็บแต่ลดลง&
;
ในฐานะที่เป็น&
จุดประสงค์ของการแยกคำสั่งมันไม่จำเป็น (และเห็นได้ชัดว่าไม่ได้รับอนุญาต) ที่จะมี;
หลังจากนั้นในบรรทัดเดียวกัน อีกวิธีคือการเขียนลูปในหลาย ๆ บรรทัด (โดยมีตัวแบ่งบรรทัดหลังจาก&
และเลือกตัวแบ่งบรรทัดหลังจากdo
และก่อนdone
เช่นกัน) เนื่องจาก;
ภายหลัง&
ดูเหมือนจะพิมพ์ผิดฉันได้ลบมัน blueyed: โปรดอย่าลังเลที่จะนำ;
กลับมาถ้าคุณต้องการมัน; ถ้าเป็นเช่นนั้นฉันขอแนะนำให้เพิ่มคำอธิบายด้วย
คุณสามารถใช้แพ็คเกจ GNU mcronซึ่งเป็นทางเลือก "Vixie cron"
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"สามารถอนุญาตให้มีการระบุจุดเวลาที่ดีกว่าได้อย่างง่ายดายเช่นวินาทีโดยหลักการนี้สามารถขยายเป็นไมโครวินาทีได้ แต่นี่ไม่ได้นำมาใช้"
mcron
จะต้องsendmail
มีการติดตั้งและเปิดใช้งานโดยค่าเริ่มต้น วิธีการปิดการใช้งาน?
การกำหนดค่าขั้นต่ำใน cron คือนาทีคุณไม่สามารถตั้งค่าได้ 5 วินาที คุณสามารถใช้ควอตซ์ซึ่งจะอนุญาตให้วินาที http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
ใช้ cacti เพื่อตรวจสอบเราเตอร์และสวิตช์ แต่ Cron อนุญาตอย่างน้อยหนึ่งนาทีดังนั้นหากหนึ่งพอร์ต / อุปกรณ์หยุดทำงานจะไม่มีการเตือนจนกว่าจะผ่านไปสองนาที
คุณสามารถใช้หน่วยตัวจับเวลา SystemD ซึ่งจะเรียกใช้บริการ - ซึ่งคุณได้ตั้งค่าให้ทำสิ่งที่คุณต้องการ - ทุก 5 วินาที
สมมติว่าหน่วยบริการของคุณถูกเรียกmystuff.service
และติดตั้งใน/etc/systemd/system
(ตรวจสอบผู้ใช้บริการ SystemDหากคุณต้องการแทนที่ crontab ของผู้ใช้) จากนั้นคุณสามารถเขียนหน่วยตัวจับเวลาเพื่อเรียกใช้บริการในเวลาบูตและจากนั้นทุก 5 วินาทีดังนี้
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
จากนั้นโหลดการกำหนดค่า systemd ใหม่เปิดใช้งานตัวจับเวลาและเริ่มต้น
ฉันทำสิ่งนี้สำเร็จแล้วอย่างมาก (และผลลัพธ์สุดท้ายได้สัปดาห์ละครั้งจนกว่าจะรีบูตเครื่อง) สำหรับสิ่งที่ฉันกำลังทำอยู่ตอนนี้อัพเดตข้อมูลและวางลงในแคช - อัพเดตทุก 10 วินาที
#!/bin/sh
SLEEP=5
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# echo and restart...
exec $0
'exec $ 0' รีสตาร์ทสคริปต์ แต่แทนที่สคริปต์ที่กำลังรัน สามารถเริ่มต้นด้วยบรรทัด crontab '@reboot'
while
วนซ้ำแทนที่จะรีสตาร์ทสคริปต์ซ้ำ ๆ