/Etc/cron.hourly में स्क्रिप्ट क्यों काम नहीं कर रही है?


16

मैंने एक निष्पादन योग्य स्क्रिप्ट रखी /etc/cron.hourly, लेकिन वह स्क्रिप्ट हर घंटे नहीं चलती थी, वास्तव में यह कभी भी नहीं चलती थी।

यहाँ स्क्रिप्ट (घंटा-ध्वनि) है जिसे मैंने बनाया है:

#! / Bin / bash
mplayer ~ / संगीत / sfx_msg-highlight.wv और> / देव / अशक्त और
spd-say -r -50 -p 50 -t male3 "अब समय $ है (तिथि +"% l% gr ")"
सूचना-भेजें "इट्स:" "$ (दिनांक +"% l% p ") अब।" -i ~ / चित्र / "पहला टी.पिंग" -t 5000

मेरा क्रेस्टैब है:

DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /home/naruto/Hour-sound.sh

जबकि आज्ञाओं mplayerऔर spd-sayआदेशों को सही ढंग से चलाया जाता है, notify-sendनहीं है। मैंने फ़ाइल में त्रुटि को पुनः निर्देशित करने का भी प्रयास किया:

0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error

लेकिन इससे कोई आउटपुट नहीं मिला। मैं क्या गलत कर रहा हूं?


सिर्फ यह सुनिश्चित करते हुए, क्या आपने स्क्रिप्ट को निष्पादन योग्य बनाया? जड़ के स्वामित्व में क्या होता है जब आप स्क्रिप्ट को टर्मिनल से चलाते हैं या वहां एक साधारण स्क्रिप्ट डालते हैं? क्या /etc/crontabहै run-partsप्रति घंटा चलाने के लिए लाइन cronनिर्देशिका से नौकरियों?
हेमायल

निष्पादन योग्य: हां, स्क्रिप्ट चलाना /etc/cron.hourly निर्देशिका से कुछ भी गलत नहीं होता है, यह नहीं पता कि यह कैसे जांचना है? क्या यह स्टार्टअप अनुप्रयोगों में है? @ हेमायल
ब्लैक ब्लॉक

1
क्या /etc/crontabफाइल में लाइन है 17 * * * * root cd / && run-parts --report /etc/cron.hourly?
हेमेयेल


1
कृपया पाठ के स्क्रीनशॉट पोस्ट न करें । खासकर जब वह पाठ पारदर्शी टर्मिनल विंडो में प्रदर्शित होता है और इसमें विचलित करने वाले रंग शामिल होते हैं।
टेराडो

जवाबों:


24

जैसा कि आपने शायद अपने प्रश्न में टिप्पणियों में देखा है, /etc/cron.hourly(और अन्य, समान निर्देशिकाओं) में क्रोनोजर द्वारा निष्पादित किया जाता है run-partsrun-partsfilenames के बारे में एक छोटा सा picky है। डिफ़ॉल्ट रूप से यह उन फ़ाइलों को निष्पादित नहीं करता है जिनके फ़ाइलनाम में इसके अलावा (ASCII से सभी) कुछ भी शामिल है

  • बड़ी वर्तनी के अक्षर
  • छोटे अक्षर
  • अंक
  • अंडरस्कोर
  • डैश ("ऋण चिह्न")

इसलिए यदि आपकी स्क्रिप्ट में "myscript.sh" उदाहरण के लिए एक फ़ाइल नाम है, तो इसे केवल अनदेखा कर दिया जाता है, क्योंकि run-partsयह डॉट पसंद नहीं करता है।


1- यहाँ मेरी फाइलें हैं: Mediafire.com/view/rg8r85xb7qw26zs/cron.hourly_017.png 2- क्या आपने /etc/cron.hourly में किसी स्क्रिप्ट की कोशिश की और आपके साथ काम किया?
ब्लैक ब्लॉक

2
मैंने बस एक लिट्टी स्क्रिप्ट का परीक्षण किया, जिसने बस / tmp में एक फ़ाइल के लिए "हैलो" लिखा था, और इसने बिना किसी समस्या के काम किया। बस मामले में, आप जानते हैं कि स्क्रिप्ट को /etc/cron.hourly"घंटे पर" आवश्यक रूप से निष्पादित नहीं किया जाता है? यदि आपके क्रोनजॉब में /etc/crontabमिनट की स्थिति में 17 हैं, तो लिपियों को 00:17, 01:17 और इसके बाद निष्पादित किया जाता है। और फिर से मामले में, स्क्रिप्ट की अनुमति उपयोगकर्ता रूट को उन्हें निष्पादित करने की अनुमति देती है?
हेनिंग कोकरबेक

याह लेकिन वह स्क्रिप्ट कभी भी नहीं चलती है। और अनुमति के बारे में यहाँ देखें: mediafire.com/view/psnb4bflawdlyly/…
ब्लैक ब्लॉक

शायद यह वास्तव में एक अनुमति समस्या है। मुझे पता है कि अधिक सामान्य लिपियों में /etc/cron.d/"समूह" या "अन्य" के लिए अनुमति लिखना या निष्पादित नहीं करना चाहिए। "स्वामी" को अनुमति की आवश्यकता है, "समूह" और "अन्य" को केवल पढ़ने की अनुमति होनी चाहिए। हो सकता है कि यह भी लागू हो /etc/cron.hourly, हालांकि मैंने यह परीक्षण नहीं किया है।
हेनिंग कोकरबेक

ठीक है, तो मैंने अपनी फ़ाइल Mediafire.com/view/s2lq63u7z54ohbo/ के लिए अनुमति बदल दी है ... जो समूह बनाता है जो रूट समूह केवल और दूसरों को पढ़ा जाता है, तो क्या यह कोई समस्या है?
ब्लैक ब्लॉक

5

एक समस्या यह है कि आप notify-sendक्रोन से एक ग्राफिकल एप्लिकेशन ( ) चलाने की कोशिश कर रहे हैं । इसमें थोड़ा ट्विकिंग लगता है। आपको क्रॉस्टैब में सेट XAUTHORITYऔर DISPLAYवैरिएबल करने की आवश्यकता है ताकि यह आपके रनिंग एक्स सेशन से कनेक्ट हो सके और आपको सेट करने की आवश्यकता हो XDG_RUNTIME_DIRताकि यह आपके पल्सेडियो सत्र से कनेक्ट हो सके। दुर्भाग्य से, इनको क्रॉस्टैब में सेट करने की आवश्यकता होती है, इसलिए आप इसका उपयोग नहीं कर सकते /etc/cron.hourly। इसके बजाय, crontab -eइन पंक्तियों को चलाएं और जोड़ें:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /path/to/script.sh 

XDG_RUNTIME_DIRजब आप echoउन्हें किसी टर्मिनल से लौटाते हैं, तो उसके मूल्य को बदलें । मेरे सिस्टम पर, यह है:

$ echo $XDG_RUNTIME_DIR
/run/user/1001

यह शायद आप पर समान होगा, लेकिन पहले जांच करें। अब, आपकी स्क्रिप्ट हर घंटे चलेगी और उम्मीद के मुताबिक काम करना चाहिए।


क्या आपका यही मतलब है कि Mediafire.com/view/ucjpvu8b41n3hue/… । यह मेरे लिए काम नहीं किया।
ब्लैक ब्लॉक

मुझे लगता है कि अगर समस्या नोटिफाई-सेंड में थी, तो अन्य कमांड भी (जैसे कि एमप्लर) क्यों नहीं चली?
ब्लैक ब्लॉक

@BlackBlock कई समस्याएं हैं। i) notify-sendको सेट करने के लिए XAUTHORITYऔर DISPLAYचर की जरूरत है और ii) mplayerको XDG_RUNTIME_DIRसेट करने की आवश्यकता है । क्या आपने मेरे सुझाव को आजमाया? यह दोनों मुद्दों को ठीक करना चाहिए। संभवतः आपको run-partsदूसरे उत्तर में बताए अनुसार नामकरण की समस्या भी थी ।
टेराडॉन

तो फिर यह मेरे लिए काम क्यों नहीं किया? मैं पागल हो रहा हूँ! मेरे जवाब पर 1 टिप्पणी में मेरी छवि देखें
ब्लैक ब्लॉक

@BlackBlock नहीं! आप संपादन कर रहे हैं /etc/crontab, ऐसा मत करो। आप चाहते हैं कि इसे आपके उपयोगकर्ता के रूप में चलाया जाए, न कि रूट के रूप में और उस फ़ाइल का वैसे भी एक अलग प्रारूप हो। बस वही करो जो मैंने अपने उत्तर में कहा था, भागो crontab -eऔर वहां की लाइनें जोड़ो।
टेराडॉन

3

फ़ोल्डर .shमें समाप्त होने वाली स्क्रिप्ट को निष्पादित नहीं किया जाता है /etc/cron.hourly:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911
रन-पार्स (जैसे /etc/cron.daily) द्वारा संभाला एक निर्देशिका के अंदर लिंक या बायनेरी एक अवधि का हिस्सा होने पर नहीं चलेगा उनका नाम।

स्क्रिप्ट का नाम बदलें

mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound

या स्क्रिप्ट-कॉल में डाल दिया

/etc/crontab

जो .shअंत की अनुमति देता है


1

विस्तार (abc.sh) के साथ स्क्रिप्ट का उपयोग न करें और अपनी आवश्यकता स्थान जोड़ें। (Cron.hours)।

अपने कोड सामान को abc फ़ाइल में जोड़ें और सहेजें। (अपनी ज़रूरत के लिए) (यह bash कमांड होना चाहिए)

उपयोग

sudo chmod +x abc

निष्पादन योग्य फ़ाइल बनाने के लिए कमांड।

edit etc/cronrtab file

वहाँ एक पूर्वनिर्धारित कुछ लाइनें है। अपने मिनट से घंटे लाइन और इसे बचाने के लिए।

तब यह ठीक से चलेगा।

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