ฉันจะรันคำสั่งเป็นระยะเวลาสั้น ๆ เป็นระยะ ๆ และรับผลตอบแทนได้อย่างไร


12

ฉันต้องเรียกคำสั่งเฉพาะในช่วงเวลาประมาณ 5 วินาที ฉันจะติดตั้ง daemon / กระบวนการที่ทำงานในพื้นหลังหรือสิ่งที่คล้ายกันได้อย่างไร ฉันดู cronjobs แต่ช่วงเวลาขั้นต่ำน่าจะเป็น 1 นาที คำแนะนำใด ๆ ที่ชื่นชม;)

Fedora เป็นระบบ

แก้ไขคำสั่งจะเป็น bashscript ดังนั้น "ระวัง" ฉันจะไม่ทำอย่างนั้น

คำตอบ:


10
(
  while true
  do
    your-command-here
    sleep 5
  done
) &
disown

สิ่งที่ปฏิเสธสำหรับ? ถ้าฉันวิ่งโดยไม่มีมันล่ะ
Hans

@Marcel disownลบงานล่าสุดออกจากตารางงานเชลล์ทำให้มันเป็น daemon อย่างที่คุณถาม ไม่ใช่ภูตจริงเพราะยังคงเชื่อมต่อกับเทอร์มินัลและอยู่ในกลุ่มกระบวนการเดียวกัน แต่จะยังคงทำงานหลังจากที่คุณปิดเชลล์
Juliano

โอเคเยี่ยมเลยนั่นใช้ได้ผล: D แค่อยากรู้อยากเห็นว่าฉันจะ "ทำ" ภูตได้อย่างไร?
ฮันส์

@Marcel วิธีที่ง่ายคือการเรียกdaemon (3)จาก C หรือภาษาอื่น ๆ ที่มีการเข้าถึงไลบรารี (ไม่ใช่จากเชลล์สคริปต์) นี่คือวิธีที่ยาก
Juliano

14

ทำไมคุณคิดว่า 'เฝ้าดู' จะไม่ทำงาน

$ cat periodic.sh
#!/bin/bash
echo $(date)
$ chmod +x periodic.sh

$ watch -n 5 ./periodic.sh

ถ้าฉันออกจากระบบจะทำอย่างไร สคริปต์ควรทำงานต่อไป
ฮันส์

มันจะหยุด แต่คุณสามารถใช้nohup watch -n 5 ./periodic.sh > periodic.log &และเก็บเอาท์พุท
naufraghi

สำหรับการใช้ pip ให้ใช้ '' quoting เพราะคำสั่ง th "ถูกกำหนดให้กับ" sh -c "ซึ่งหมายความว่าคุณอาจจำเป็นต้องใช้ quoting พิเศษเพื่อให้ได้ผลตามที่ต้องการ"
andrej


1

watchคำสั่งมีความเหมาะสมในกรณีของคุณผมจะใช้ Multiplexer ขั้ว (เช่น tmux หน้าจอ, ฯลฯ ) และเรียกใช้คำสั่งโดยใช้

watch -n 5 ./script.sh

ในกรณีนี้แม้ว่าคุณจะปิดการเชื่อมต่อเทอร์มินัลหรือ ssh กับสคริปต์สคริปต์จะยังคงทำงานอยู่

ข้อ จำกัด เพียงอย่างเดียวของวิธีการนี้คือสคริปต์จะทำงานทุก 5 วินาทีเฉพาะเมื่อดำเนินการเสร็จสิ้นภายในช่วงเวลานั้น


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