स्क्रिप्ट crontab के माध्यम से नहीं चलती है, लेकिन ठीक स्टैंडअलोन काम करती है


51

मेरे पास एक स्क्रिप्ट है जो मुझे याद दिलाती है कि यदि मेरा कंप्यूटर uptime3 से अधिक दिनों का है, तो 3 दिन (हालांकि इसके 0 दिन अभी सेट हैं, यह जांचने के लिए कि क्या स्क्रिप्ट चल रही है क्योंकि मेरा कंप्यूटर केवल एक दिन से ऊपर है ..)।

मुझे लगता है कि यह सबसे सुंदर स्क्रिप्ट नहीं है, लेकिन मैं कोशिश कर रहा हूँ! :)

#!/bin/bash

up=$(uptime | grep "day" > /home/username/uptime.foo && awk < /home/username/uptime.foo '{ print $3 }')

[[ $up -gt 0 ]] && xmessage -center "Restart!"

मैंने इसे निष्पादन योग्य बना दिया है chmod + x checkup.shऔर यह ठीक काम करता है जब मैं इसे टर्मिनल के माध्यम से चलाता हूं./checkup.sh

इस स्क्रिप्ट के लिए मेरी कोंट्राब प्रविष्टि है:

46 14 * * * /home/username/Desktop/./checkup.sh

तो यह 14: 46hrs दैनिक पर चलता है ...

इसलिए ... मैं सोच रहा हूं कि इसे चलना चाहिए, जब तक कि मैं वास्तव में मूर्खतापूर्ण कुछ नहीं करता। इसके अलावा, क्या आपको लगता है कि इस बैश स्क्रिप्ट को स्थानांतरित करना ठीक है /bin?


1
मैं इसे / ऑप्ट / बिन या ~ / बिन में एक सामान्य सर्वोत्तम अभ्यास के रूप में रखूँगा जहां पैकेज सोचें कि नहीं हैं।
रोबोटहूमंस

यदि आप स्क्रिप्ट को इस तरह से चलाते हैं: /home/dnaneet/Desktop/./checkup.sh यह काम करता है? मैं /home/dnaneet/Desktop/checkup.sh
LnxSlck

@LnxSlck हां, रनिंग /home/dnaneet/Desktop/./checkup.shठीक काम करता है। लेकिन /home/dnaneet/Desktop/checkup.shसही काम नहीं हो सकता है? क्योंकि यह एक की जरूरत है ./?
19

1
मुझे नहीं लगता कि क्रोन को आपके एक्स सत्र के बारे में कुछ भी पता है।
ग्लेन जैकमैन

@glennjackman तो इसका क्या मतलब है? क्या इसका मतलब है कि crontab के माध्यम से इस तरह की स्क्रिप्ट को चलाने से एक पॉप अप संदेश को सूक्ति वातावरण में दिखाने की अनुमति नहीं है?
प्रियं

जवाबों:


71

एक समय पे एक चेज:

पहले आपको एक उपयोगकर्ता आधारित बिन फ़ोल्डर देते हैं:

cd ~/ && mkdir bin

आप crontab का उपयोग करना चाहते हैं। चलो कुछ सरल के साथ शुरू करते हैं:

* * * * * touch /tmp/testing.txt

ठीक है, ताकि काम करे

चलिए अब एक स्क्रिप्ट चलाने की कोशिश करते हैं जो ऐसा ही करती है

* * * * * /home/username/bin/touchtest.sh

एक मिनट चलाने के लिए जब तक आप इसे काम
नहीं करते हैं, आपको लाइन के बीच में / ./ की आवश्यकता नहीं है। ./ के लिए है जब आप रिश्तेदार urls दे रहे हैं।
ठीक है, ताकि काम करे

अब xmessage को कॉल करने वाली स्क्रिप्ट को चलाने का प्रयास करें

* * * * * /home/username/bin/rebootwarn.sh

काम नहीं कर रहा

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

आइए हम अपने एनाक्रोन की उचित क्रोन फ़ाइल की तरह दिखते हैं। मैंने इसे परीक्षण के रूप में सहेजा है

#Borrowed from anacron
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#End borrowed from anacron

* * * * *   /bin/bash /home/username/bin/test.sh

मिनट में एक बार चलाने के लिए सेट करें

crontab test इसे आयात करने के लिए

स्क्रिप्ट पर

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
up=$(uptime | grep "day" > /home/dnaneet/uptime.foo && awk < /home/dnaneet/uptime.foo '{ print $3 }')

[[ $up -gt 0 ]] && xmessage -center "Restart!"`

ठीक है, तो यह काम करता है ... हमने क्या किया?
हमने उन सभी कमांडों को बदल दिया, जिन रास्तों पर हम निर्भर नहीं थे, हमने स्पष्ट रूप से सेट नहीं किया था।
हमने अपनी स्क्रिप्ट को स्पष्ट रूप से बैश के साथ चलाया । हमने
उस स्क्रिप्ट को बताया जिसे हम DISPLAY पर होने की उम्मीद करते हैं: 0.0


जवाब के लिए धन्यवाद। आपने कहा था "चलो हमारी तरह एनाक्रॉन की उचित क्रोन फ़ाइल की तरह दिखते हैं..मैंने इसे परीक्षण के रूप में सहेजा है" .. हमारा क्या? Crontab फ़ाइल? :-/
प्रातः

Heres मैंने क्या देखा। पहले मुझे =लाइन को निर्दिष्ट करने के लिए पहले और बाद में अंतरिक्ष से छुटकारा पाना था DISPLAY। दूसरा, जब मैंने अपनी crontab फ़ाइल को संपादित किया और PATHजैसा कि सुझाया गया था और बाद में चलने का समय निर्धारित किया, पॉप अप विंडो नहीं दिखा। हालाँकि, पॉपअप विंडो ने स्क्रिप्ट का उपयोग करते समय ठीक दिखाया /bin/bash... क्या देता है?
प्यारेन

आप क्या जानते हैं, एक बार मैंने अपनी स्क्रिप्ट को बदल दिया export DISPLAY=:0.0, तो यह ठीक काम किया। हालाँकि घड़ी के समय के बाद लगभग 5 सेकंड का महत्वपूर्ण अंतराल था जब मेरी पॉप अप विंडो को दिखाना चाहिए था ... कोई सुझाव? लेकिन हाँ, आपका स्क्रिप्ट काम में बदल जाता है!
प्रियर।

5 सेकंड लैग पर कोई विचार नहीं।
रोबॉटहूमंस

3
मैं जिस तरह से आप इस कदम से कदम के माध्यम से चला गया और फिर इसे संक्षेप में प्यार करता हूँ - धन्यवाद!
jbobbins

10

समस्या को Google में मैनुअल पढ़ा गया:

विवरण:

  1. मेरे पास #!/bin/bashहेडर के रूप में स्क्रिप्ट है
  2. मैंने स्क्रिप्ट रखी /home/wc3/palert/

विश्लेषण:

  1. crontab मेरी स्क्रिप्ट नहीं चला सकता
  2. लेकिन अगर मैं मैन्युअल रूप से चलाता हूं तो यह आउटपुट दिखाता है और मैं अपने वेब पर भी परिणाम देख सकता हूं
  3. इसका मतलब है कि जब आप अपने स्क्रिप्ट फ़ोल्डर पर अपनी स्क्रिप्ट चलाते हैं, तो crontab को पर्यावरण नहीं मिल सकता है

का जवाब:

  1. अपनी स्क्रिप्ट के साथ नीचे इस पंक्ति का उपयोग करके अपना पर्यावरण रखें:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/wc3/palert
    

    इसे बदल दें: इसके /home/wc3/palert
    साथ: वह स्थान जहाँ आप अपनी स्क्रिप्ट रखते हैं उदा/home/budi/script.sh

नमूना:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/budi
# Script continues...

अपने स्क्रिप्ट को क्रॉस्टैब पर रखने की कोशिश करें।


मेरे लिए काम नहीं करता है
जॉन जो

मेरे लिए एक आकर्षण की तरह काम करो!
1rq3fea324wre
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.