मैं अपने क्रेस्टैब में एक प्रविष्टि कैसे जोड़ूं?


13

मैं पहली बार crontab का उपयोग कर रहा हूं। कुछ बहुत ही सरल परीक्षण क्रोन कार्यों को लिखना चाहते हैं, और उन्हें चलाना चाहते हैं।

$crontab * * * * * echo "Hi"

कुछ भी उत्पादन नहीं करता है।

crontab */1 * * * * echo "hi"

कहता है */1: No such file or directory

इसके अलावा, मैं वर्तमान में चल रहे क्रोन कार्यों को कैसे सूचीबद्ध कर सकता हूं (न केवल मैं जो खुद हूं, बल्कि अन्य उपयोगकर्ताओं जैसे रूट के रूप में भी शुरू करते हैं)।

और मैं किसी विशेष क्रोन कार्य को कैसे हटाऊं?


क्रोन नौकरियों को संपादित करने और बनाने के निर्देश के बारे में निर्देश के लिए और फाइल संरचना पर एक स्पष्टीकरण इस crontab सिंटैक्स गाइड को देखें
KJS

जवाबों:


21

आप crontabउस तरह का उपयोग नहीं कर सकते । man crontabइस उपयोगिता को कॉल करने के सही तरीके के बारे में पढ़ने के लिए उपयोग करें ।

आप crontab -eवर्तमान उपयोगकर्ता की क्रोन प्रविष्टियों को संपादित करना चाहते हैं (आप लाइनों को जोड़ / संशोधित / निकाल सकते हैं)। crontab -lकॉन्फ़िगर किए गए कार्यों की वर्तमान सूची देखने के लिए उपयोग करें ।

अन्य उपयोगकर्ता के क्रॉस्टैब देखने के लिए, डिफ़ॉल्ट इंस्टॉलेशन पर रूट किए बिना संभव नहीं है। देखें कि कैसे मैं सभी उपयोगकर्ताओं के लिए सभी तरीकों की सूची के लिए सभी क्रोन नौकरियों को सूचीबद्ध करता हूं (रूट के रूप में)।

नोट: जब आप कमांड लाइन ( *और ?विशेष रूप से) पर शेल गोलाकार पात्रों का उपयोग करते हैं तो बहुत सावधान रहें । *वर्तमान निर्देशिका में फ़ाइलों की सूची में विस्तारित किया जाएगा, जिसमें अप्रत्याशित प्रभाव हो सकते हैं। यदि आप *किसी चीज़ के तर्क के रूप में पारित करना चाहते हैं , तो उसे उद्धृत करें ( '*')।


इसलिए मैं crontab -e करता हूं और संपादक में मैंने प्रविष्टि * / 1 * * * * इको "hi" डाल दी और जब मैं इस फाइल को सहेजता हूं, तो मुझे संदेश दिखाई देता है कि crontab: new crontab इंस्टॉल करना। लेकिन मुझे स्क्रीन पर दिखने वाले हाई मैसेज नहीं दिखते। अब मुझे क्या याद आ रहा है? धन्यवाद।
xyz

2
crontab का आउटपुट आपके "स्क्रीन" पर कभी नहीं जाएगा। Crontab के लिए POSIX मैन पेज से: "यदि मानक आउटपुट और मानक त्रुटि को crontab प्रविष्टि से निष्पादित कमांड द्वारा पुनर्निर्देशित नहीं किया जाता है, तो किसी भी उत्पन्न आउटपुट या त्रुटियों को एक कार्यान्वयन-निर्भर विधि के माध्यम से, उपयोगकर्ता को मेल किया जाएगा।"
Mat

1
नौकरी का आउटपुट नौकरी के मालिक के स्थानीय मेल बॉक्स में भेजा जाएगा। ( mailकमांड लाइन से रनिंग को आपके स्थानीय मेल बॉक्स तक पहुँचा जाना चाहिए, अगर कॉन्फ़िगर किया गया है।) ग्राफिक वातावरण में 'हाय' देखने के लिए, आप कार्य को निम्नानुसार सेट कर सकते हैं * * * * * export DISPLAY=:0; xmessage 'hi':।
10

@manatwork आपको XAUTHORITY की भी आवश्यकता हो सकती है, जो आसान नहीं हो सकता है
derobert

7

संपादन के दो तरीके हैं crontab:

  1. सहभागी, का उपयोग करते हुए crontab -e, जो खुल जाएगा crontabद्वारा निर्दिष्ट संपादक में $VISUALया $EDITOR, या

  2. गैर-अंतःक्रियात्मक, उपयोग करके crontab crontab.txt, जो crontabफ़ाइल से प्रविष्टियों को सीधे आयात करेगा crontab.txt, वर्तमान उपयोगकर्ता के लिए मौजूदा सक्रिय crontab की जगह

आपके पास जो समस्या है वह यह है कि आप बस crontabकमांड का गलत उपयोग कर रहे हैं।


निम्नलिखित चिंताओं में गैर-संवादात्मक कोंट्राब हेरफेर:

इसलिए, प्रोग्रामेटिक रूप से विशेष कार्यों को हटाने के लिए , आप कुछ ऐसा कर सकते हैं

$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt

जहाँ PATTERNएक नियमित अभिव्यक्ति है जो उस कार्य (मेलों) से मेल खाएगी जिसे आप हटाना चाहते हैं। यहां, crontab -lआपको अपना वर्तमान देगा crontab

या, यदि आपके पास एक फ़ाइल में प्रविष्टियाँ हैं crontab-fragment.txtजिन्हें आप सक्रिय क्रॉस्टैब से निकालना चाहते हैं,

$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt

यह वर्तमान crontab पढ़ता है और किसी भी लाइन को फ़िल्टर करता है (हटाता है) crontab-fragment.txtजो वर्तमान निर्देशिका में फ़ाइल में भी होता है (पूर्ण लाइन स्ट्रिंग तुलना का उपयोग करके)। crontab.txtवर्तमान crontab को बदलने के लिए परिणाम को सहेजा जाता है और फिर वहां से लोड किया जाता है।

एक या कई कार्य जोड़ने के लिए , कुछ ऐसा करें

$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt

यह मान रहा है कि फ़ाइल crontab-fragment.txtमें वे प्रविष्टियाँ हैं, जिन्हें आप जोड़ना चाहते हैं। यह वर्तमान crontab पढ़ता है, इसमें से प्रविष्टियों को जोड़ता है crontab-fragment.txtऔर बनाता है crontab.txtcrontab.txtफ़ाइल तो मौजूदा crontab बदल देता है।


2

यदि आप अंतःक्रियात्मक रूप से क्रॉस्टैब को संशोधित करना चाहते हैं, तो कमांड को चलाएं crontab -e, कोई अन्य विकल्प नहीं है। यह क्रेस्टब की एक प्रति पर एक संपादक शुरू करेगा; जब आप संपादक से बाहर निकलते हैं , तो संपादित की गई कॉपी नया क्रेस्टब बन जाएगी। आप नियंत्रित कर सकते हैं कि कौन सा संपादक पर्यावरण VISUALऔर EDITORपर्यावरण चर के माध्यम से शुरू किया गया है । अपने crontab को सूचीबद्ध करने के लिए, दौड़ें crontab -l

यदि आप किसी स्क्रिप्ट में सेटटैब को संशोधित करना चाहते हैं, तो स्क्रिप्ट के लिए या शेल स्निपेट पर सेट करें VISUALऔर EDITORजगह में आपूर्ति की गई फ़ाइल को संशोधित करता है। संपादक edयहां एक संभावना है, या sed -iयदि आपके कार्यान्वयन sedमें यह विकल्प है। यदि आप बिना शर्त एक पंक्ति जोड़ना चाहते हैं, तो आप उपयोग कर सकते हैं echo … >>। उद्धृत करने के साथ ध्यान रखना; यदि सभी संदेह में हैं, तो एक स्क्रिप्ट लिखें और स्क्रिप्ट का नाम पास करें EDITOR

script=$(mktemp)
cat <<'EOF' >"$script"
#!/bin/sh
ed -s "$1" <<'EOS'
g/^ *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *echo "hi"$/d
$a
* * * * * echo "hi"
.
w
q
EOS
EOF

2

यह थोड़ा देर से है, लेकिन दूसरों के लिए यहां देख रहे हैं। इनपुट / आउटपुट स्ट्रीम के साथ हेरफेर करने की तुलना में आसान तरीके हैं VISUALऔर EDITOR

आप बस एक फ़ाइल में अपने क्रोन शेड्यूल को लिख सकते हैं, प्रति पंक्ति 1 नौकरी, और कमांड का उपयोग crontab [filename]कर सकते हैं ताकि आप अपनी स्क्रिप्ट के हिस्से के रूप catमें अपनी नौकरी कर सकें filenameऔर फिर अंत में कॉट्रैब को कॉल कर सकते हैं यदि आप चाहें।

वास्तव में man crontabयह पहले सूचीबद्ध करके संकेत के रूप में सबसे आम उपयोग है


2

यदि आप crontabऑटोमेशन या कमांड लाइन से प्रविष्टियाँ जोड़ना चाहते हैं , तो आप कर सकते हैं (आपके पास जो समय की इच्छा हो उसे सेट करके)

echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)

फिर:

service crond reload

Crontabs को फिर से लोड करने के लिए।


यह अप्राप्य है; सभी यूनिक्स अंडरस्ट्रीम फाइलों को स्टोर नहीं करते हैं /var/spool/cron। एक बेहतर तरीका crontab(1)कमांड के माध्यम से होगा ।
मृग

यह सच हो सकता है, लेकिन यह सिद्धांत दिखाना था कि आप इसे एक सिस्टम पर कैसे कर सकते हैं, और हां, अगर आप लाइन से लाइन जोड़ना चाहते हैं, तो कॉट्रैब करता है। यह एक पूर्ण उत्तर होने के लिए नहीं था, लेकिन एक अगर आपको पता है कि आपका सामान कहां है, और आपको बड़े पैमाने पर जोड़ने की आवश्यकता है। यह जो है, उसके लिए इसे ले लो।
क्रिस स्प्रूसफील्ड

1

इसे इस आदेश के साथ आज़माएं:

crontab -e 

फिर अपना क्रॉन जॉब जोड़ें:

*/1 * * * * echo "hi"

उस फ़ाइल में।


0

मैं नीचे वर्णित तरीके को उजागर करना चाहूंगा, हालांकि इसका उल्लेख एक अन्य टिप्पणी में पहले भी किया गया है। मैंने प्रविष्टियों को फ़ाइल में जोड़ते समय इसे अत्यंत उपयोगी पाया और फिर फ़ाइल को crontab में जोड़ा। उस फ़ाइल में नीचे दो प्रविष्टियाँ होंगी और फ़ाइल का नाम होगा hello-world-crontab.txt

  • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 0 09 * * * python /home/user/greeting.py

फिर, मैंने इन प्रविष्टियों को क्रॉस्टैब में जोड़ने के लिए नीचे दिए गए कमांड को निष्पादित किया।

  • $ crontab hello-world-crontab.txt

अगला कदम यह है कि इन प्रविष्टियों को सत्यापित किया गया है।

  • $ crontab -l

प्रत्येक प्रविष्टि क्या करती है पर एक संक्षिप्त विवरण:

  • इस crontab प्रविष्टि "हैलो दुनिया!" फ़ाइल में /home/user/greeting.txtहर दिन सुबह 9 बजे।
    • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • यह क्रॉन्बट एक अजगर फाइल को अंजाम देता है, जो कमांड लाइन 'हैलो वर्ल्ड' में प्रिंट होती है। हर दिन सुबह 9 बजे।
    • 0 09 * * * python /home/user/greeting.py
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.