- ยูทิลิตีสำหรับสร้าง ระบบคิวงานน้ำหนักเบาที่ทำงานได้โดยไม่ต้องมีการตั้งค่าหรือเดมอนแยกต่างหาก
- รองรับ Linux/MacOS - สามารถใช้งานได้บนระบบที่เข้ากันได้กับ POSIX และรองรับ flock(2)
- รองรับ การจัดคิวงานเฉพาะกิจ (ad-hoc queuing) ผ่านบรรทัดคำสั่ง
- เหมาะกับงานที่ต้องรันตามลำดับ เช่น การ build ด้วย Makefile, การดาวน์โหลดไฟล์, การรัน benchmark
- ใช้แทน
nohup ได้เช่นกัน
- ลำดับงานถูก รับประกันอย่างเคร่งครัดผ่านการซิงก์ด้วย timestamp ระดับมิลลิวินาที
- สร้าง TIMESTAMP.PID สำหรับแต่ละโปรเซสและใช้ flock (file lock)
- เมื่อ flock ก่อนหน้าถูกปลดล็อก จึงเริ่มงานถัดไป
- เนื่องจากซิงก์กันในระดับไฟล์ซิสเต็ม จึง ไม่จำเป็นต้อง polling
- เมื่อเพิ่มงานเข้าคิวด้วยรูปแบบ
nq CMDLINE... จะพิมพ์ job ID แล้วรันในพื้นหลัง
- STDOUT/STDERR จะถูก redirect ไปยังไฟล์ล็อก
- สามารถ แยกสถานะงานด้วยภาพได้อย่างชัดเจน ผ่าน execution bit (
+x) ของไฟล์ล็อก
- นามสกุลชื่อไฟล์ล็อกประกอบด้วย PID ทำให้จัดการงานได้สะดวก
- ก่อนเริ่มรันจะใช้ PID ของ
nq และหลังเริ่มรันจะเปลี่ยนเป็น PID ของงานจริง
- สามารถรันไฟล์ล็อกเหมือน shell script เพื่อ รันงานเดิมซ้ำได้
ความแตกต่างจาก at, batch, task-spooler
at
เครื่องมือสำหรับ รันงานตามเวลาที่กำหนด
จะเรียกคำสั่งในเวลาที่ตั้งไว้ตามนาฬิการะบบ และมักใช้กับงานแบบตั้งเวลาครั้งเดียว
batch
จะรันงานเมื่อ ภาระของระบบ (load average) ต่ำ
จุดประสงค์คือ ควบคุมการรันตามภาระระบบ มากกว่าการตั้งเวลา และมีเดมอนคอยจัดการ
task-spooler
รองรับ การประมวลผลงานแบบลำดับหรือแบบขนาน โดย รันเดมอนที่ใช้จัดการคิวโดยอัตโนมัติ
สามารถกำหนด จำนวนงานสูงสุดที่รันพร้อมกัน ได้
ตั้งคิวแยกตามแต่ละเทอร์มินัล ได้ และตรวจสอบสถานะของแต่ละคิวผ่านคำสั่งได้
nq
ทำงานได้โดยไม่ต้องมีเดมอน และจัดการคิวด้วย file system lock (flock) ในระดับไดเรกทอรี เท่านั้น
ไม่พิจารณาภาระของระบบหรือเวลานัดหมาย แต่เน้น รับประกันลำดับของงาน อย่างเรียบง่าย
ดูล็อกของคิวแบบเรียลไทม์ได้ด้วย nqtail
แต่ละไดเรกทอรีทำหน้าที่เป็นคิวอิสระ จึงสามารถแยกใช้งานหลายคิวได้ด้วยตัวแปรแวดล้อม $NQDIR
2 ความคิดเห็น
สไตล์โค้ดดูเก่ามากจนเป็นสไตล์ Sourceforge ยุคโบราณเลย ผมนึกว่าตัวเองย้อนเวลากลับไปแล้วซะอีก 555
ถ้าเทียบกับยุค Sourceforge ก็ยังเป็นนักพัฒนาตัวจิ๋วอยู่ แต่ตอนแรกก็คิดว่า "หมายความว่าอะไรนะ?" ก่อนจะพอเห็นว่ามีการขึ้นบรรทัดใหม่ระหว่างชนิดค่าที่ฟังก์ชันคืนกับชื่อฟังก์ชัน ก็เข้าใจเลยครับ o.o
ไม่ทราบว่าในโค้ดนั้นยังมีจุดไหนที่ดูออกว่าเป็นสไตล์การเขียนโค้ดแบบเก่าอีกบ้างไหมครับ?