crontab का @reboot केवल रूट के लिए काम करता है?


64

man 5 crontab बूट पर स्क्रिप्ट चलाने के लिए कॉन्टैब का उपयोग करने के तरीके पर बहुत स्पष्ट है:

   These special time specification "nicknames" are supported, which replace the 5 initial time and date
   fields, and are prefixed by the `@` character:
   @reboot    :    Run once after reboot.

इसलिए मैंने ख़ुशी से अपने कॉन्ट्राब (मेरे उपयोगकर्ता खाते के तहत, रूट नहीं) के लिए एक एकल पंक्ति जोड़ी:

@reboot     /home/me/myscript.sh

लेकिन किसी कारण के लिए, myscript.sh मशीन रिबूट पर नहीं चलेगा। (यह ठीक चलता है अगर मैं इसे कमांड लाइन से लागू करता हूं, तो यह एक अनुमत समस्या नहीं है)

मैं क्या खो रहा हूँ?


@ एंथन के सवालों का जवाब देने के लिए अपडेट करें:

  1. Oracle-linux संस्करण: 5.8 (uname: 2.6.32-300.39.2.el5uek # 1 SMP)
  2. क्रोन संस्करण: विक्सी-क्रोन-4.1-81.el5.x86_64
  3. हाँ, /home है एक घुड़सवार विभाजन। लगता है यही समस्या है। मैं इसे कैसे हल करूँ?
  4. वर्तमान में, myscript.shकेवल एक फ़ाइल में एक पाठ संदेश इको /home/me

2
आपका उपयोगकर्ता crontab @reboot विकल्प का समर्थन नहीं करता है, कुछ crontab लेआउट हैं, एक बार जब आप चारों ओर poking शुरू करते हैं।
X Tian

@XTian धन्यवाद। रूट के अलावा उपयोगकर्ता के रूप में रिबूट पर स्क्रिप्ट चलाने के लिए अनुशंसित तरीका क्या है?
१।

2
आप जो याद कर रहे हैं वह अस्पष्ट है, लेकिन जो हम याद कर रहे हैं वह विवरण है। ओर्क्ल-लिनेक्स का कौन सा संस्करण चल रहा है? आपके पास क्रोन का कौन सा संस्करण है? है /homeएक घुड़सवार विभाजन? आपकी क्या सामग्री हैं /home/me/myscript.sh?
एंथन

1
यदि आप Oracle के लिन का उपयोग कर रहे हैं। ver। 5 विक्सी-क्रोन + के साथ मुद्दों के बारे में यह चैंज है @rebootoss.oracle.com/pipermail/el-errata/2012-March/002655.html
SLM

1
@ डैनियल - myscript.shनिष्पादन योग्य है? chmod +x myscript.sh
स्लम

जवाबों:


47

यह एक भ्रामक विषय हो सकता है क्योंकि क्रोन के विभिन्न कार्यान्वयन हैं। इसके अलावा कई कीड़े थे जिन्होंने इस सुविधा को तोड़ दिया, और कुछ उपयोग के मामले भी हैं जहां यह बस काम नहीं करेगा, खासकर यदि आप शटडाउन / बूट बनाम रिबूट करते हैं।

कीड़े

डेटापॉइंट # 1

डेबियन में ऐसा ही एक बग यहां कवर किया गया है, जिसका शीर्षक है: क्रोन: @reboot जॉब नहीं । ऐसा लगता है कि इसने उबंटू में भी रास्ता बना लिया है, जिसकी मैं सीधे पुष्टि नहीं कर सकता।

डेटापॉइंट # 2

उबंटू में बग के साक्ष्य इस एसओ क्यू एंड ए शीर्षक में यहां पुष्टि किए गए प्रतीत होंगे: @reboot cronjob निष्पादित नहीं कर रहा है

अंश

टिप्पणी # 1: .... 3) crond का आपका संस्करण @reboot का समर्थन नहीं कर सकता है क्या आप vix के crond का उपयोग कर रहे हैं? ... crontab -l -u उपयोगकर्ता के परिणाम दिखाएं

टिप्पणी # 2: ... यह क्रोन के @reboot के एक विशिष्ट संस्करण पर निर्भर होने के बजाय इसे एक init स्क्रिप्ट के रूप में स्थापित करने के लिए एक अच्छा विचार हो सकता है।

टिप्पणी # 3: ... @MarkRoberts ने रिबूट को हटा दिया और 1 * * * * को संशोधित करके, * / 1 * * * * तक कर दिया, समस्या हल हो गई! मैं rep pts मार्क कहाँ भेजूँ? धन्यवाद!

उस प्रश्न और उत्तर में स्वीकृत उत्तर में भी यह टिप्पणी थी:

मुझे लगता है लुबंटू @Reboot क्रोन सिंटैक्स का समर्थन नहीं करता है।

अतिरिक्त सबूत

डेटापॉइंट # 3

अतिरिक्त सबूत के रूप में यह धागा था कि कोई एक ही चीज का प्रयास कर रहा था और निराश हो रहा था कि यह काम नहीं किया। इसका शीर्षक है: धागा: क्रोन - @reboot काम नहीं कर रहा है

अंश

पुन :: क्रॉन - @reboot काम नहीं कर रहा है

Ceallred ने लिखा है: पोस्ट देखें यह मुझे मार रहा है ... आवरण स्क्रिप्ट की कोशिश की। रनिंग मैन्युअल रूप से लॉग फ़ाइल उत्पन्न करता है ... रिबूट करना और कार्य लॉग फ़ाइल को चलाना या बनाना नहीं है।

Syslog दिखाता है कि CRON ने काम चलाया ... लेकिन फिर से, कोई आउटपुट नहीं है और प्रक्रिया नहीं चल रही है। Jul 15 20:07:45 रेवेनविंग क्रोन [1026]: (CRON) INFO (रनिंग @reboot जॉब्स) Jul 15 20:07:45 रेवेनविंग CRON [1053]: (ceallred) CMD (/ home / ceallred / Scripts / run_spideroak)। sh> /home/ceallred/cripts/SpiderOak.log 2> और 1 &)

ऐसा लगता है जैसे क्रोन @reboot कमांड को पसंद नहीं करता .... कोई अन्य विचार?

ठीक है ... आंशिक रूप से हल किया गया। मैं इसे हल के रूप में चिह्नित करूँगा और नए मुद्दे के साथ एक नया सूत्र शुरू करूँगा .....

मुझे लगता है कि जवाब था कि मेरा एन्क्रिप्टेड होम डायरेक्टरी माउंट नहीं किया गया था जब CRON स्क्रिप्ट (होम / उपयोगकर्ता नाम / स्क्रिप्ट में संग्रहीत) चलाने की कोशिश कर रहा था। / Usr / लिपियों में चले गए और नौकरी उम्मीद के मुताबिक चलती है।

इसलिए अब यह एक स्पिरोडैक मुद्दा प्रतीत होता है। प्रक्रिया शुरू होती है, लेकिन जब तक बूट प्रक्रिया समाप्त हो जाती है, तब तक यह समाप्त हो जाता है। मैं किसी कारण के लिए एक दुर्घटना का अनुमान लगा रहा हूं .... उस बारे में पूछने के लिए नया धागा।

पूरी सहायताके लिए शुक्रिया!

एक बार यह ऊपर के उपयोगकर्ता को अपने मुद्दे का पता चल गया कि वह @rebootएक उपयोगकर्ता के crontab प्रविष्टि से बाहर काम करने में सक्षम था ।

मुझे पूरी तरह से यकीन नहीं है कि उबंटू पर क्रोन के किस संस्करण का उपयोग किया जाता है, लेकिन यह इंगित करने के लिए प्रतीत होगा कि उपयोगकर्ता @rebootभी उपयोग कर सकता है, या कि क्रॉन के बाद के संस्करणों में बग को कुछ बिंदु पर तय किया गया था।

डेटापॉइंट # 4

मैंने CentOS 6 पर निम्न परीक्षण किया और यह काम कर गया।

उदाहरण

$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1

मैंने तब सिस्टम को रिबूट किया।

$ sudo reboot

रिबूट के बाद।

$ cat reboot.txt 
hi

रास्ते ले लो

  1. यह सुविधा सिस्टम और उपयोगकर्ता crontab प्रविष्टियों दोनों के लिए समर्थित लगती है।
  2. आपको यह सुनिश्चित करना होगा कि यह आपके विशेष डिस्ट्रो और / या क्रोन पैकेज के संस्करण में समर्थित / काम कर रहा है।

अधिक जानकारी के लिए कि @rebootमैं इस ब्लॉग पोस्ट के लिए वास्तविक तंत्र कैसे काम करता हूं, जो कि अंतरंगों पर चर्चा करता है। इसका शीर्षक है: @reboot - सरल क्रोन जादू की व्याख्या करना

डिबगिंग क्रोनड

crondआरएचईएल / सेंटोस / फेडोरा आधारित डिस्ट्रोस पर इस कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित जोड़कर आप क्रिया को बदल सकते हैं ।

$ more crond 
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS="-L 2"

मान्य स्तर 0, 1, या 2 हैं। इस फ़ाइल को वापस करने के लिए यह डिफ़ॉल्ट लॉगिंग स्तर है बस "-L 2"जब आप स्थिति को डीबग कर रहे हों तो हटा दें ।


कल एक टिप्पणी मिली , आपके जवाब को देखा और एक अच्छी रात की नींद के बाद खुद को जवाब देने का फैसला किया। VM को सेट करें, @reboot को पुनःप्राप्त, मेरा उत्तर पोस्ट करना चाहता था और उसके बाद ही आपने अपना उत्तर ed reworded ’देखा :-(
Anthon

@ एंथन - क्षमा करें, मैंने कल इसका तुरंत जवाब दिया और फिर इस पर शोध करना जारी रखा और बहुत ही परस्पर विरोधी विवरण पाए। जब मुझे इसके बारे में डेबियन पर बग मिला और उबंटू एसओ तो मुझे कुछ एहसास हुआ कि यह क्या था। मैंने देखा कि यह CentOS पर काम करता है और इसे एक साथ रखा है जो कि @rebootकुछ क्रोनों में ठीक है, और जाहिर तौर पर दूसरों में छोटी गाड़ी / टूटी हुई है। इसलिए भ्रम।
स्लम

इसके अलावा, ओपी थोड़ा विस्तार प्रदान करता है, आप आसानी से अपनी स्क्रिप्ट में कुछ ऐसा काम कर सकते हैं जो अभी तक (बूट समय में) काम नहीं करता है जो इसे विफल कर देता है, या यह एक अभी तक माउंट नहीं किया गया डिस्क पर रहता है। मेरे जवाब पर ओपी ने जो टिप्पणी की, उसकी पुष्टि एक तीसरे पक्ष ने भी की। यह है ब्लैक स्वान प्रॉब्लम ...
एंथन

@ एंथन - हां मेरा एक डाटा पॉइंट बिल्कुल यही था। @rebootएक बार जब आप महसूस करते हैं कि यह एक एन्क्रिप्टेड ड्राइव तक पहुँचने की कोशिश कर रहा है, तब तक काम नहीं किया गया था।
स्लम

3
आप यह बताना चाहेंगे कि उबंटू में बग को देरी से जोड़कर आसानी से हल किया जा सकता है @reboot sleep 60; <your command>:। धागे को उद्धृत करने के लिए, "मेरा अनुमान है कि क्रोन के @reboot निर्देश बूट प्रक्रिया में बहुत जल्दी चल रहे हैं"
pzkpfw

12

मुझे पता चला कि मेरे उबंटू मशीन पर, मेरे पास dns सेवाओं तक पहुंच नहीं है, फिर भी, @reboot समय पर। इसने मुझे बढ़ते दूरस्थ संस्करणों से रोका। यह आसान है, अभी तक काम किया है:

@reboot sleep 60 && /home/me/bin/mount.sh 2>&1 >> /home/me/reboot.log

(रूट क्रोन में; अंतिम भाग केवल डिबगिंग के लिए)


यह केवल एक चीज है जो वास्तव में गैर रूट उपयोगकर्ताओं के लिए ubuntu 16.04 पर काम करती है!
अलेक्जेंडर पविओक

डेबियन 8 जेसी (सूक्ति 3) पर काम नहीं कर रहा। :(
तद्ज

बढ़ते हुए VMWare के साथ एक अलग स्थान पर साझा किए गए फ़ोल्डरों से निपटने पर यह मेरे लिए काम करता है।
१०:१२ बजे गुड़

3

मेरे पास mac osx भी है और मेरे पास वही मुद्दा है जहां मेरी स्क्रिप्ट नहीं चल रही थी। लेकिन जब मैंने अपनी स्क्रिप्ट को पसंद करने के लिए तय किया

@reboot   cd /home/me/  && sh myscript.sh

इसने मेरे लिए अच्छा काम किया। कमांड चलाकर अपनी शेल फ़ाइल को निष्पादन योग्य बनाना सुनिश्चित करें

chmod +x myscript.sh

2

मुझे नहीं पता कि क्या आपने पहले ही इसे हल कर लिया है, या यदि उपरोक्त में से कोई भी समाधान आपकी आवश्यकता है, लेकिन एक और संभावना है:

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

इस परिदृश्य में, आप अपनी स्क्रिप्ट को किसी अन्य स्थान पर ले जा सकते हैं जैसे / srv या / ऑप्ट या / usr / स्थानीय / बिन / आदि।


1

Ubuntu Gnome 13.10 (मेरे मामले में डिफ़ॉल्ट उपयोगकर्ता: avanderneut) की एक नई स्थापना लें।

avanderneut@uggo:~$ crontab -l
no crontab for avanderneut
avanderneut@uggo:~$ crontab -e
no crontab for avanderneut - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.tiny

Choose 1-3 [2]: 3
crontab: installing new crontab
avanderneut@uggo:~$ crontab -l | tail -2
# m h  dom mon dow   command
@reboot /home/avanderneut/bin/on_reboot
avanderneut@uggo:~$ vi /home/avanderneut/bin/on_reboot
avanderneut@uggo:~$ more !$
more /home/avanderneut/bin/on_reboot
#! /bin/bash
echo "Reboot script" > /var/tmp/xxx
avanderneut@uggo:~$ chmod 755 /home/avanderneut/bin/on_reboot
avanderneut@uggo:~$ ls /var/tmp
avanderneut@uggo:~$ /home/avanderneut/bin/on_reboot
avanderneut@uggo:~$ ls /var/tmp
xxx
avanderneut@uggo:~$ rm /var/tmp/xxx
avanderneut@uggo:~$ sudo reboot
[sudo] password for avanderneut: 

और देखें कि फ़ाइल /var/tmp/xxxको रिबूट करने के बाद वहाँ है हालांकि यह रिबूट करने से पहले नहीं था।

यह क्रोन संस्करण 3.0 के साथ किया गया था।

आपको यह सुनिश्चित करना होगा कि कोई भी सेवा डिस्क आदि का उपयोग नहीं किया जाता है जो स्क्रिप्ट के चलने के समय उपलब्ध नहीं हो सकता है। ऊपर की तरह कुछ सरल से शुरू करें और सुनिश्चित करें कि इसका कोई टर्मिनल आउटपुट नहीं है क्योंकि ईमेल शायद ऊपर और चल नहीं रहा है।

यदि आपको यह काम नहीं आया और आपको इस सुविधा की आवश्यकता है, तो आपको एक और अप-टू-डेट क्रोन (या ओरेकल-लिनेक्स से अपग्रेड) की आवश्यकता हो सकती है।


मैंने आपके प्रश्नों का उत्तर देने के लिए अपना ओपी अपडेट किया। पता चलता है कि आपका संदेह शुरू से ही सही था: रिबूट पर चलने वाली स्क्रिप्ट एक माउंटेन /dev/mapper/VolGroup00-LogVol01विभाजन पर रहती है ।
रोक

@ डैनियल मुझे बताने के लिए धन्यवाद, मुझे खुशी है कि आपने अपराधी को ढूंढ लिया। मुझे यकीन नहीं है कि अगर आप विभाजन शुरू होने तक क्रोन की शुरुआत में देरी कर सकते हैं, तो उस स्टार्टअप में से कुछ समानांतर में किए जाते हैं और आपको निर्भरता बदलनी होगी। मैं उस और संभावित ब्रेक के साथ गड़बड़ नहीं करना चाहूंगा cron। उपयोगकर्ता के रूप में स्टार्टअप पर एक बार कुछ चलाने के लिए आपको IMHO को crontab और @reboot से अलग मार्ग लेना चाहिए।
एंथन

0

मैं सवाल के लिए हां कहूंगा। रिबूट पर क्रोन चलाने में मुश्किलें थीं (डेबियन 3.10.70) और इसके साथ हल करने में कामयाब रहे:

@reboot root /usr/bin/python3 /path/to/script

और अंत में एक नया चरित्र '\ n'

यह फ़ाइल की सामग्री है:

/etc/cron.d/runOnReboot

अंत में, मुझे लगता है कि यह एक सार से ध्यान देने योग्य है man 5 crontab

... एक क्रोन कमांड का प्रारूप बहुत अधिक V7 मानक है, जिसमें कई अपवर्ड-संगत एक्सटेंशन हैं। प्रत्येक पंक्ति में पाँच समय और दिनांक फ़ील्ड होती हैं, जिसके बाद एक कमांड होता है, उसके बाद एक नया वर्ण ('\ n') होता है। सिस्टम crontab (/ etc / crontab) समान प्रारूप का उपयोग करता है, सिवाय इसके कि कमांड के लिए उपयोगकर्ता नाम समय और दिनांक फ़ील्ड और कमांड से पहले निर्दिष्ट किया जाता है। फ़ील्ड को रिक्त स्थान या टैब द्वारा अलग किया जा सकता है। कमांड फ़ील्ड के लिए अधिकतम अनुमत लंबाई 998 वर्ण है। ...


-1

prueba:

usuario @ ubuntu: ~ $ टच स्क्रिप्ट.sh usuario @ ubuntu: ~ $ chmod + x script.sh

usuario @ ubuntu: ~ $ $ crontrab -e

@reboot /home/usuario/script.sh

सहेजें और अपने पीसी को पुनरारंभ करें

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