ระบบการเข้าคิวง่าย ๆ ?


10

ด้วยพีซีแบบ Commodity เราต้องการใช้มันเพื่อทำงานบางอย่างในพื้นหลังตลอดเวลา

โดยทั่วไปเราต้องการมีคำสั่งเช่น:

add-task *insert command here*
list-tasks
remove-task(s)

งานที่เพิ่มเข้ามาควรอยู่ในคิวและดำเนินการทีละรายการในพื้นหลัง (ยังคงทำงานหลังจากออกจากระบบของเชลล์)

มีสคริปต์ / โปรแกรมง่าย ๆ ที่ทำสิ่งนี้?

คำตอบ:


7

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

echo 'command1 --foo=bar' | batch      
echo 'command2 "$(wibble)"' | batch
at -q b -l              # on many OSes, a slightly shorter synonym is: atq -q b
at -q b -r 1234         # Unschedule a pending task (atq gives the task ID)

มันผิดที่จะบอกว่าbatchคำสั่ง "ไม่ทำการขนานใด ๆ " โดยปกติจะมีการหน่วงเวลาเริ่มต้น 60 วินาทีระหว่างการเริ่มงานหนึ่งและเริ่มงานถัดไป อย่างไรก็ตามไม่มีอะไรที่จะทำให้งานต่อไปรอให้เสร็จก่อน - atdจะเริ่มงานอย่างมีความสุขจากชุดคิวทันทีที่ค่าที่กำหนดโดย-bตัวเลือกที่ผ่านไป (ดูatdหน้าคน)
rsaw

แบตช์ไม่ได้เรียงลำดับงานอย่างเคร่งครัดดังนั้นหากคุณมีทรัพยากรที่ใช้ร่วมกันเพียงครั้งเดียวคำตอบของ @sitaram (ตัวจัดคิวงาน) ควรทำงานได้ดีขึ้น
ergos

5

โซลูชันอื่นคือการใช้lpdและสร้าง "ไดรเวอร์การพิมพ์" ที่กำหนดเองที่ทำงานของคุณ เพื่อนช่วยให้ฉันทำงานนี้เมื่อฉันมีคำขอที่คล้ายกัน ทำสคริปต์เช่นนี้และใส่ไว้ใน/tmp/batch.sh:

#!/bin/bash

TMPFILE=$(mktemp /tmp/XXXX)
exec <"$6"
cat - > $TMPFILE
chmod a+x $TMPFILE
$TMPFILE
rm -f $TMPFILE

จากนั้นเรียกใช้:

lpadmin -p batch1 -E -P /tmp/batch.sh

นั่นเริ่มคิวและคุณสามารถสร้างเพิ่มเติมโดยใช้ชื่ออื่นแทน batch1 เพิ่มงานด้วย:

lp -d batch1 /path/to/jobscript

จัดการงานด้วยlpq, และlprm lpstatหากคุณต้องการความยืดหยุ่นมากขึ้นในการส่งผ่านข้อโต้แย้งไปยังงานของคุณคุณสามารถสร้างสคริปต์ batch.sh ได้มากกว่า

(ฉันพยายามbatchก่อนที่จะลงเส้นทางนี้ แต่ไม่ว่าจะเป็นคิวใน OSX หรือฉันใช้ผิด)


ฉันรู้ว่า @arnaud ระบุ "ชุดคำสั่งพีซี" ซึ่งหมายความว่าอาจไม่ใช่ OSX ที่ฉันทำการทดสอบโซลูชันนี้ batchแต่นี้ควรจะพกพาและมีความยืดหยุ่นมากขึ้นกว่า
Joe Fusion

1
นี่เป็นไปได้ที่จะเป็นหนึ่งในแฮ็คของแท้ที่สุดที่ฉันเคยเห็น
Thiago Macedo

น่าเศร้าที่สิ่งนี้ดูเหมือนจะไม่ทำงานอีกต่อไป github.com/apple/cups/commit/…
wdkrnls

4

มีระบบการเข้าคิวจำนวนมาก แต่บ่อยครั้งที่มีความเชี่ยวชาญเป็นพิเศษ

คุณอาจดูเป็นตัวatกำหนดตารางเวลา มันเหมือนcronในบางวิธี แต่เป็นการตั้งค่าให้เหมือนคิวสำหรับงานครั้งเดียวมากกว่าสำหรับงานซ้ำ สามารถ "กำหนดเวลา" สิ่งต่าง ๆ ตามเกณฑ์อื่น ๆ นอกเหนือจากเวลาเช่นโหลดระบบหรือลำดับของงาน

Distro ที่คุณโปรดปรานจะมีแพ็คเกจให้


2

ฉันสังเกตเห็นว่าคำถามนี้มีอายุหลายปีดังนั้นจึงอาจไม่ช่วยโปสเตอร์ต้นฉบับ แต่อาจช่วยเหลือคนอื่นได้

ข้อแรก: "ตัวจัดคิวงาน" คือคำตอบ มันค่อนข้างทรงพลังและอย่างน้อย Fedora ก็มี

แต่เซิร์ฟเวอร์จำนวนมากที่ฉันใช้ฉันไม่สามารถติดตั้งแพ็กเกจตามอำเภอใจได้โดยไม่ต้องยุ่งยากดังนั้นฉันจึงต้องการบางสิ่งที่เป็นการทุบตีอย่างแท้จริง

หลังจากที่ต้องดิ้นรนกับสิ่งนี้มาระยะหนึ่งฉันก็พบกับการใช้งานทุบตีบริสุทธิ์ซึ่งดูเหมือนจะทำงานได้ดี คุณสามารถค้นหาได้ที่https://github.com/sitaramc/bq

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

สคริปต์นี้มีการแสดงความคิดเห็นอย่างอิสระและคุณควรสามารถตรวจสอบได้ในไม่กี่นาทีหากคุณต้องการ


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