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


43

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

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


9
मेरे लिए, यह एक वैध सर्वोत्तम-अभ्यास प्रश्न जैसा दिखता है, और मुझे आशा है कि यह बंद नहीं होगा। मैं पहले से ही प्रासंगिक, तथ्यात्मक बिंदुओं को उत्तरों में बनाया जा रहा हूं, और टिप्पणियों को देख सकता हूं।
मैडहैटर

1
मैं एक बार crontab -l टाइप करने गया था (crontab को सूचीबद्ध करने के लिए) लेकिन मैंने crontab टाइप किया -; गलती से जिसने मेरे क्रेटाब को हटा दिया। मैंने उस दिन बहुत कुछ सीखा।
लैंबरजैक 15

जवाबों:


64

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

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

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

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

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

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


18
संपादन /etc/crontabका एक दोष यह है कि जब भी आप cronपैकेज को अपडेट करते हैं, तो मर्ज की आवश्यकता होगी । यदि आपके पास /etc/cron.*निर्देशिकाओं में से किसी एक में एक नई फ़ाइल जोड़ते हैं तो आपके पास यह समस्या नहीं है ।
कास्परड सिप

1
आपको जोड़ना चाहिए कि ज्यादातर डिस्ट्रोस /etc/cron.[hourly |daily |weekly |monthly]में निष्पादन योग्य/etc/cron.d वस्तुएं होती हैं, जबकि क्रॉस्टैब्स धारण करते हैं। इसके अलावा, +1।
GnP

मैं निश्चित रूप से क्रोन का प्रशंसक हूं। [टाइमिंग] निर्देशिकाएं, मुझे शायद ही कभी कमीन विकल्पों की तुलना में अधिक बारीक की आवश्यकता होती है। हालांकि कृपया ध्यान दें कि कुछ डिस्ट्रोस, विशेष रूप से उबंटू, इन फ़ोल्डरों में फ़ाइल एक्सटेंशन के साथ लिपियों को चुपचाप अनदेखा कर देंगे (एक काफी इंटरनेट-अपमानजनक बग, अधिकांश लोगों को जोड़ने के लिए। यह समझना बहुत मुश्किल है कि स्क्रिप्ट उस स्थिति में काम क्यों नहीं कर रही थी - कम से कम क्रॉस्टैब को जोड़ना निष्पादन की गारंटी है।
गर्गवृक्ष

15

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


2
सिंटैक्स सत्यापन के बारे में +1 अच्छा बिंदु, हालांकि यह कुछ सिंटैक्स त्रुटियों को पहचानता है यह मूर्खता से दूर भी है (यानी यह खुशी से आपको /etc/crontab6 वें कॉलम में उपयोगकर्ता नाम के साथ एक पंक्ति में प्रवेश करने की अनुमति देगा )। - हालांकि मैं यह तर्क देना चाहूंगा कि इंटरैक्टिव टूल का उपयोग करना "सर्वश्रेष्ठ अभ्यास" नहीं है , आपको कठपुतली / नमक / Ansible आदि जैसे उपकरणों के साथ स्वचालित करना चाहिए और पहले से कहीं भी हाथ से सर्वर को कॉन्फ़िगर नहीं करना चाहिए। दूसरी ओर यदि आप पुराने स्कूल में हैं, तो वास्तव में अपने उपकरणों का उपयोग करें।
HBruijn

यदि आप 5+ सर्वरों को कॉन्फ़िगर करते हैं तो Ansible और अन्य अच्छे हैं, लेकिन सिर्फ 1 के लिए परेशानी के लायक नहीं है। आप तर्क दे सकते हैं कि सिर्फ 1 सर्वर के साथ एक Ansible स्क्रिप्ट आपको पहचानने के लिए इसे फिर से बनाने की क्षमता देता है जब यह लाइन से 2 साल नीचे विफल हो जाता है, लेकिन उस बिंदु पर स्क्रिप्ट डिस्ट्रोस / रेपो परिवर्तन के कारण अब काम नहीं करने की संभावना है।
marcv81

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

यदि कोई स्क्रिप्ट लॉन्च करते समय मदद करता है, और स्क्रिप्ट में त्रुटियां हैं, तो ड्राई रन परीक्षण की आवश्यकता है।
mckenzm

@mckenzm ने सहमति व्यक्त की, लेकिन केवल इतना बेवकूफ-प्रूफिंग है कि आप आवेदन कर सकते हैं :)
गर्गव्रीप

2

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


2

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

 # crontab -u <user> -e

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

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


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

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