सरल कतार प्रणाली?


10

एक कमोडिटी पीसी को देखते हुए, हम इसका उपयोग चौबीसों घंटे पृष्ठभूमि में कुछ कार्यों को निष्पादित करने के लिए करना चाहेंगे।

मूल रूप से, हम जैसे आदेश देना चाहेंगे:

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कमांड "कोई समानांतर नहीं करता है"। एक काम शुरू करने और अगले शुरू करने के बीच आम तौर पर डिफ़ॉल्ट 60sec देरी होती है; हालाँकि, अगली नौकरी खत्म होने के लिए पहले इंतजार करने के लिए कुछ भी नहीं है - atdजैसे ही -bविकल्प द्वारा निर्धारित मूल्य समाप्त हो जाएगा ( atdमैन पेज देखें ) जैसे ही आप बैच की कतार से नौकरी छोड़ देंगे ।
rsaw

बैच कड़ाई से कार्यों को क्रमबद्ध नहीं करता है, इसलिए यदि आपके पास एक भी साझा संसाधन है, तो @sitaram का उत्तर (कार्य स्पूलर) बेहतर काम करना चाहिए।
मिटता है

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

यह एक कतार शुरू करता है, और आप बैच 1 के बजाय अन्य नामों का उपयोग करके अधिक बना सकते हैं। इसके साथ एक नौकरी जोड़ें:

lp -d batch1 /path/to/jobscript

साथ कार्य प्रबंधित करें lpq, lprmऔर lpstat। यदि आप अपनी नौकरी के लिए तर्कों को पारित करने के साथ अधिक लचीलापन चाहते हैं, तो आप बैच। S स्क्रिप्ट के प्रशंसक बन सकते हैं।

(मैंने batchइस मार्ग से नीचे जाने से पहले कोशिश की थी, लेकिन या तो यह OSX पर एक कतार के रूप में काम नहीं करता है, या मैं इसे गलत उपयोग कर रहा था।)


मुझे लगता है कि @arnaud ने "कमोडिटी पीसी" निर्दिष्ट किया है, जिसका अर्थ है कि यह शायद OSX नहीं है, जहां मैंने इस समाधान का परीक्षण किया। हालांकि, यह पोर्टेबल होना चाहिए, और यह बहुत अधिक लचीला है batch
जो फ्यूजन

1
यह मेरे द्वारा देखे गए सबसे वास्तविक हैक में से एक है।
थियागो मेसेडो 21

अफसोस की बात है, यह अब काम नहीं करता है। github.com/apple/cups/commit/…
wdkrnls

4

बहुत सारे कतारबद्ध सिस्टम हैं, लेकिन अक्सर बहुत विशिष्ट हैं।

आप atअनुसूचक में देख सकते हैं । यह cronकुछ मायनों में पसंद है लेकिन यह रिपीट जॉब्स की तुलना में एक समय की नौकरियों के लिए एक कतार की तरह अधिक सेटअप है। यह समय के अलावा अन्य मानदंडों पर चीजों को "शेड्यूल" कर सकता है, जैसे कि सिस्टम लोड या नौकरियों का अनुक्रम।

आपका पसंदीदा डिस्ट्रो लगभग निश्चित रूप से इसके लिए पैकेज होगा।


2

मैंने देखा कि यह प्रश्न कई साल पुराना है, इसलिए यह मूल पोस्टर की मदद नहीं कर सकता है, लेकिन यह किसी और की मदद कर सकता है।

पहला: "कार्य स्पूलर" उत्तर है। यह बहुत शक्तिशाली है और फेडोरा कम से कम है।

लेकिन बहुत सारे सर्वर जो मैं उपयोग करता हूं, मैं बहुत परेशानी के बिना मनमाना पैकेज स्थापित नहीं कर सकता हूं, इसलिए मुझे कुछ ऐसा चाहिए जो आदर्श रूप से शुद्ध बैश (या पर्ल, या ऐसी) हो।

कुछ समय तक इससे जूझने के बाद, मैं एक शुद्ध बैश कार्यान्वयन के साथ आया जो अब तक ठीक काम करता प्रतीत होता है। आप इसे https://github.com/sitaramc/bq पर पा सकते हैं ।

यह सिर्फ एक बैश स्क्रिप्ट है इसलिए स्थापना तुच्छ है। हालांकि, यह आपकी दूसरी और तीसरी आवश्यकताओं को पूरा करता है (लेकिन इसे लागू करने के लिए भी तुच्छ होना चाहिए)।

लिपि पर उदारतापूर्वक टिप्पणी की गई है और यदि आप चाहें तो आपको कुछ मिनटों में इसकी समीक्षा करने में सक्षम होना चाहिए।


डेबियन पैकेज टास्क-स्पूलर है, निष्पादन योग्य "टीएस" के बजाय "टीएस" है जो कुछ और के साथ टकरा गया। मुझे यह भी पसंद है क्योंकि आप कतार में हैं कार्यों को फिर से कर सकते हैं, आप ऐसा नहीं कर सकते / बैच के साथ।
ergys
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.