टर्मिनल पर क्रॉन जॉब से आउटपुट प्राप्त करना


15

मेरा एक कार्यक्रम है जो कुछ आउटपुट प्रिंट करता है जिसे मैं कार्यदिवस के दौरान हर घंटे में एक बार अपने टर्मिनल पर पॉप अप करना चाहता हूं।

$ crontab -l
0 07-17 * * * /home/dat/scripts/cron.out

syslog निम्नलिखित रिपोर्ट करता है:

(dat) CMD (/home/dat/scripts/cron.exe)
Jun 18 12:02:01 picard CRON[10848]: (CRON) info (No MTA installed, discarding output)

मुझे किसकी याद आ रही है?


क्रोन नौकरियों को टर्मिनल पर लिखना नहीं है - कोई भी उपलब्ध नहीं हो सकता है।
गुंटबर्ट

जवाबों:


14

गंदा तरीका आपके प्रोग्राम के आउटपुट को पहले से मौजूद टर्मिनल की पीटीएस फाइल में रीडायरेक्ट कर सकता है ।

Pts फाइल को जानने के लिए बस ttyकमांड टाइप करें

~$ tty
/dev/pts/4

तो आपका कोंट्राब होगा:

0 07-17 * * * /home/dat/scripts/cron.out > /dev/pts/4

दूसरा तरीका टर्मिनल के तर्क के रूप में कार्यक्रम को लॉन्च करना हो सकता है:

xfce4-terminal --command=/home/dat/scripts/cron.out --display=:0.0 -H

जहाँ displayX प्रदर्शन है जहाँ आप टर्मिनल दिखाना चाहते -Hहैं, टर्मिनल को कमांड समाप्त होने के बाद खुले रहने के लिए कहना है। यह हर बार एक नया टर्मिनल बनाएगा।

crontab:

0 07-17 * * * /usr/bin/xfce4-terminal --display=:0.0 -H --command=/home/dat/scripts/cron.out

यदि प्रदर्शन मौजूद नहीं है, तो आपको syslog द्वारा लॉग की गई कोई त्रुटि होगी।


6

Cron आपको आपकी स्क्रिप्ट का आउटपुट ईमेल करता है। दुर्भाग्य से, उबंटू डिफ़ॉल्ट रूप से स्थानीय मेल सेट नहीं करता है , यही वजह है कि क्रोन आपको लॉग में "कोई एमटीए स्थापित, आउटपुट को त्यागना " बताता है ।

स्थानीय मेल सेट करना आपकी समस्या को हल करने का एक तरीका हो सकता है। टर्मिनल में आउटपुट के बजाय, आपको एक ईमेल सूचना मिलेगी।

अगर आप चाहते हैं कि आपका क्रॉन जॉब टर्मिनल पर आउटपुट करे, तो आपको इसके आउटपुट को टर्मिनल पर रीडायरेक्ट करना होगा। पुनर्निर्देशन भाग आसान है -

0 07-17 * * * /home/dat/scripts/cron.out >/dev/pts/42 2>&1

लेकिन यह समस्या सुलझ रही है कि किस टर्मिनल को पुनर्निर्देशित किया जाए। इसका कोई सार्वभौमिक उत्तर नहीं है, यह निर्भर करता है कि आप उन लोगों के बीच टर्मिनल का चयन कैसे करना चाहते हैं जो आप लॉग इन हैं।

विशिष्ट उपयोगों के लिए, एक GUI अधिसूचना अधिक उपयुक्त होगी। आप उपयोग कर सकते हैं notify-send। आपको पर्यावरण चर सेटDISPLAY करना होगा ।

0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"

2

क्रोन एक मेलर को आउटपुट भेजता है। यदि आप किसी टर्मिनल में आउटपुट देखना चाहते हैं तो आप किसी फाइल में लॉग इन कर सकते हैं और टर्मिनल में आउटपुट देखने के लिए टेल -f का उपयोग कर सकते हैं।


किसी फ़ाइल में लॉग इन करें

  • सबसे सरल उत्तर एक फ़ाइल में सीधे लॉग इन करना है जैसे कि कॉन्टैब प्रविष्टि:

0 07-17 * * * /home/dat/scripts/cron.out > /path/to/log.txt 2> /path/to/error.txt

लॉग करने के वैकल्पिक तरीके:

  • यदि आपका प्रोग्राम एक ऐसा विभाजन है, जिसे लिखा जा सकता है, तो आप इसे लॉग फ़ाइल के साथ आउटपुट पर पुनर्निर्देशित कर सकते हैं। echo output > log.txt, या आप नीचे वर्णित एक आवरण स्क्रिप्ट का उपयोग कर सकते हैं ।
  • यदि आपका प्रोग्राम एक द्विआधारी या अन्यथा संयुक्त-योग्य है, तो आपको फ़ाइल पर आउटपुट कैप्चर करने के लिए रैपर स्क्रिप्ट लिखना होगा ।

उदाहरण कार्यक्रम और आवरण स्क्रिप्ट:

$ cat program.sh wrapper.sh 
#!/bin/bash
# sample program
echo "arg 1=$1 arg2=$2 arg3=$3"
echo "sample error" >&2 

#!/bin/bash
# sample wrapper
exec ./program.sh "$@" >log.txt 2> error.txt

उदाहरण रन 1:

$ ./wrapper.sh 1 2 3 ; cat error.txt  log.txt 
sample error
arg 1=1 arg2=2 arg3=3

उदाहरण रन 2:

$ ./wrapper.sh "A B C" D E ; cat error.txt log.txt 
sample error
arg 1=A B C arg2=D arg3=E

टर्मिनल में आउटपुट देखें:

अब जब कि अपने दोनों मानक बाहर और एक फाइल करने के लिए मानक त्रुटि, किसी भी टर्मिनल में प्रवेश करने के लिए, आप चला सकते हैं tail -fएक या दोनों फाइलों पर की तरह tail -f log.txtया tail -f log.txt error.txtतो यह है कि पूंछ देख सकते हैं या नहीं बल्कि संशोधन के लिए फ़ाइल (फ़ाइलें) का पालन करेंगे। टेल मैन-पेज

$ tail -f log.txt  error.txt
==> log.txt <==
arg 1=1 arg2=2 arg3=3

==> error.txt <==
sample error

लॉगिंग फ़ाइलें बाद में संलग्न:

यदि या तो log.txt या error.txt बाद में या तो आपके प्रोग्राम से या किसी अन्य टर्मिनल से जोड़ा जाता है, तो $ echo "more output" >> log.txtआउटपुट को टर्मिनल रनिंग पर देखा जाता है$ tail -f log.txt error.txt

==> log.txt <==
more output

इसके अलावा, $ echo code red >> error.txtपरिणाम:

==> error.txt <==
code red
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.