सवाल क्या मुझे रूट के रूप में / etc / crontab संपादित करना चाहिए या crontab -e चलाएं?


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

मैं पिछला व्यवस्थापक देखता हूं (जिसने कंपनी छोड़ दी है) संपादित / etc / crontab सीधे। हालांकि मैं समझता हूं कि एक और संभावित दृष्टिकोण उपयोग करना होगा crontab -e जड़ के रूप में क्या एक या दूसरे का उपयोग करने के लिए कोई आकर्षक तर्क है, या यह वरीयता के लिए नीचे है?


42
2017-09-06 06:51


मूल


मेरे लिए, यह एक वैध सर्वोत्तम अभ्यास प्रश्न की तरह दिखता है, और मुझे उम्मीद है कि यह बंद नहीं होगा। मैं पहले से ही उत्तर में प्रासंगिक, तथ्यात्मक अंक देख रहा हूं, और वहां टिप्पणियां देख सकता हूं। - MadHatter
मैं एक बार crontab -l टाइप करने के लिए चला गया (crontab सूचीबद्ध करने के लिए) लेकिन मैं crontab टाइप किया -; गलती से जिसने मेरे क्रोंटब को हटा दिया। मैंने उस दिन बहुत कुछ सीखा। - Lumberjack


जवाब:


यह ध्यान रखना उपयोगी हो सकता है कि व्यक्तिगत क्रोंटैब में नौकरियां (crontab -e) हमेशा उनके मालिक के रूप में निष्पादित होते हैं, जहां /etc/crontab एक अतिरिक्त अनिवार्य है <user> फ़ील्ड एक व्यवस्थापक को गैर-मूल उपयोगकर्ता के रूप में चलाने के लिए नौकरी को कॉन्फ़िगर करने की इजाजत देता है।

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

व्यक्तिगत रूप से मैं एक का पक्ष लेता हूं तीसरा विकल्प: प्रत्येक निर्धारित कार्य ड्रॉप के लिए या तो ड्रॉप करें

  • में एक फाइल /etc/cron.d/ एक क्रॉन स्निपेट के साथ
  • प्रासंगिक में एक निष्पादन योग्य (स्क्रिप्ट) /etc/cron.[hourly |daily |weekly |monthly] निर्देशिका।

स्क्रिप्ट के लिए यह आसान है (आप आसानी से ऐसी फाइलें बना / ओवरराइट / हटा सकते हैं और आपको एक क्रॉन्टाब फ़ाइल की सामग्री में मकसद नहीं है) और यह कॉन्फ़िगरेशन प्रबंधन टूलिंग के साथ अच्छी तरह से काम करता है और यही पैकेज प्रबंधक पहले से ही हैं वैसे भी कर रहे हैं।

नौकरी / स्क्रिप्ट में /etc/cron.[hourly |daily |weekly |monthly] हमेशा जड़ के रूप में निष्पादित किया जाता है, जहां क्रॉन स्निपेट्स में /etc/cron.d/ एक कस्टम अनुसूची सेट करने के साथ-साथ एक ही अनिवार्य उपयोगकर्ता के साथ एक अलग उपयोगकर्ता के रूप में चलने की अनुमति दें <user> क्षेत्र में मिला /etc/crontab


58
2017-09-06 07:13



संपादन की कमी /etc/crontab यह है कि जब भी आप अपडेट करते हैं तो एक विलय की आवश्यकता होगी cron पैकेज। यदि आप बस में से एक में एक नई फाइल जोड़ते हैं तो आपको वह समस्या नहीं है /etc/cron.* निर्देशिका। - kasperd
यह एक बहुत अच्छा जवाब है, बहुत बहुत धन्यवाद। - marcv81
आपको सबसे अधिक distros में जोड़ना चाहिए /etc/cron.[hourly |daily |weekly |monthly] रखती है निष्पादनयोग्य जबकि /etc/cron.d crontabs रखती है। इसके अलावा, +1। - GnP
मैं निश्चित रूप से क्रॉन का प्रशंसक हूं। [समय] निर्देशिकाएं, मुझे शायद ही कभी कॉमन विकल्पों की तुलना में कुछ और दानेदार की आवश्यकता होती है। हालांकि कृपया ध्यान दें कि कुछ डिस्ट्रोज़, विशेष रूप से उबंटू, चुपचाप इन फ़ोल्डरों में फ़ाइल एक्सटेंशन के साथ स्क्रिप्ट को अनदेखा कर देगा (काफी इंटरनेट-आउटरिंग बग, ज्यादातर लोगों को .sh, जो हाल ही में डिस्ट्रोज़ में तय किया गया हो) पर विचार करेगा। काम करना बहुत मुश्किल है कि स्क्रिप्ट इस स्थिति में क्यों काम नहीं कर रहे थे - कम से कम क्रोंटब को जोड़ने के लिए निष्पादित करने की गारंटी है। - Gargravarr


सबसे अच्छा मुझे याद है, crontab -e इसमें अतिरिक्त लाभ है कि यह इसे स्थापित करने से पहले क्रोंटैब सिंटैक्स को सत्यापित करता है, और यदि आप कोई गलती करते हैं तो पिछली त्रुटि और पुनर्स्थापित करेंगे। इस तरह, जो कुछ भी पहले काम कर रहा था वह अचानक बंद नहीं होगा अगर आपको वाक्यविन्यास गलत लगता है। मुझे लगता है कि चलने की तरह उपयोगिताओं का उपयोग करना सबसे अच्छा अभ्यास है visudo संपादन के बजाय /etc/sudoers सीधे।


16
2017-09-06 15:12



+1 सिंटैक्स सत्यापन के बारे में अच्छा बिंदु, हालांकि यह कुछ वाक्यविन्यास त्रुटियों को पहचानता है, यह मूर्ख-प्रमाण से भी दूर है (यानी यह खुशी से आपको प्रवेश करने की अनुमति देगा /etc/crontab 6 वें कॉलम में उपयोगकर्ता नाम के साथ लाइन)। - हालांकि मैं तर्क देना चाहता हूं कि इंटरैक्टिव टूल्स का उपयोग नहीं करना है "सर्वश्रेष्ठ प्रणालियां", आपको कठपुतली / नमक / उत्तरदायी इत्यादि जैसे उपकरणों के साथ स्वचालित करना चाहिए और पहले हाथ में सर्वरों को हाथ से कॉन्फ़िगर नहीं करना चाहिए। दूसरी ओर यदि आप पुराने स्कूल हैं, तो वास्तव में अपने उपकरणों का उपयोग करें। - HBruijn
उत्तर और अन्य अच्छे हैं यदि आप 5+ सर्वर कॉन्फ़िगर करते हैं, लेकिन केवल 1 के लिए परेशानी के लायक नहीं हैं। आप तर्क दे सकते हैं कि केवल 1 सर्वर के साथ एक उत्तरदायी स्क्रिप्ट आपको लाइन के नीचे 2 साल तक विफल होने पर समान रूप से पुनर्निर्माण करने की क्षमता प्रदान करती है, लेकिन उस बिंदु पर लिपियों को distros / repos परिवर्तनों के कारण अब और काम नहीं करने की संभावना है। - marcv81
यही कारण है कि मैं स्वीकार्य उत्तर से दृढ़ता से असहमत हूं। जो भी बदलाव किए जा रहे हैं, कम से कम एक बार इस सत्यापन प्रक्रिया के माध्यम से चलाया जाना चाहिए। यदि कोई नया क्रॉन्टाब से एक रेखा की प्रतिलिपि बनाता है और इसे अन्य सर्वरों के प्रचार के लिए एक स्वचालित उपकरण प्रदान करता है, तो यह दोनों दुनिया के सर्वश्रेष्ठ है। - Monty Harder
स्क्रिप्ट लॉन्च करने में मदद न करें, और स्क्रिप्ट में त्रुटियां हैं, इसलिए ड्राई रन परीक्षण की आवश्यकता है। - mckenzm
@mckenzm सहमत हो गया, लेकिन केवल इतना बेवकूफ प्रूफिंग है जो आप आवेदन कर सकते हैं :) - Gargravarr


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


2
2017-09-06 14:58





एक क्रॉन नौकरी जोड़ने के लिए सुनिश्चित करने के लिए, जिसके लिए एक विशिष्ट उपयोगकर्ता के अधिकार की आवश्यकता होती है, मैं व्यक्तिगत रूप से निम्न आदेश का उपयोग करता हूं:

 # crontab -u <user> -e

आप जोड़ सकते हो sudo भी।

जैसा कि @rackandboneman ने कहा है, /etc/cron.d/ फ़ाइलों के साथ गड़बड़ करने की कोई आवश्यकता नहीं है। यदि मामला उपयोगकर्ता की क्रॉन नौकरियों के बारे में है, तो सुविधाओं का उपयोग करें crontabआदेश।


2
2017-09-06 15:10



-1 उपर्युक्त करने का बड़ा नुकसान यह है कि उपयोगकर्ता अब cronjob को संशोधित / हटा / तोड़ने में सक्षम है, जो आम तौर पर वांछनीय नहीं है जब आप व्यवस्थापक ने मूल्यवान समय को चीजों को स्थापित करने में बिताया ... जब भी उपयोगकर्ता एक सेवा खाता है और वह खाता लॉक / समाप्त हो गया है, सेवा चलाना जारी रहेगी लेकिन लॉक खातों के लिए व्यक्तिगत क्रॉन टैब आमतौर पर अक्षम हो जाएंगे। - HBruijn
यदि यहां निर्दिष्ट उपयोगकर्ता सार्वजनिक उपयोगकर्ता सेवा जैसे सार्वजनिक टर्मिनल सेवा वातावरण का सदस्य है, तो आप सही हैं। हालांकि, अगर मामला किसी सेवा / एजेंट के उपयोगकर्ता के बारे में है ... दूसरे विचार पर, यह वास्तव में शैली के बारे में है। - aesnak