उपयोगकर्ता के रूप में crontab कैसे चलाएं: www-data?


32

मेरा LAMP काम करने के लिए सेटअप है user:www-dataऔर सभी फाइल और फ़ोल्डर्स उस अनुमतियों के साथ बनाए गए हैं।

मेरे पास उपयोगकर्ता @ ubuntu के रूप में crontab के लिए सेटअप है।

इसलिए मैं crontab -eइस कमांड का उपयोग करता हूं :

*/5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1

मूल रूप से वह कमांड केवल निर्दिष्ट स्थान पर कैश फ़ाइल बनाता है (उस के साथ कोई समस्या नहीं), लेकिन वह कैश फ़ाइल उपयोगकर्ता के साथ बनाई गई है: उपयोगकर्ता अनुमतियाँ अनुमतियाँ नहीं user:www-data

मैं यह कैसे कर सकता हूं कि यह डिफ़ॉल्ट रूप से user:www-dataअनुमतियों के साथ फ़ाइल बना देगा ?
मैं नहीं जा सकता और chownहर बार फ़ाइल को फिर से बनाया जाता है।

धन्यवाद।


ध्यान दें कि कुछ crontab स्क्रिप्ट जो www-data (जैसे awstats, या php5सेशनक्लाइन) के रूप में चलती हैं, /etc/cron.*निर्देशिकाओं में स्थित हैं और इस तरह से crontab -e(उपयोगकर्ता www-डेटा निर्दिष्ट करते समय भी) दिखाई नहीं देती हैं ।
स्किप्पी ले ग्रैंड गौरौ

जवाबों:


40

आप सिस्टम एंट्रेस में अपनी प्रविष्टि लिख सकते हैं /etc/crontab, जो उपयोगकर्ता को चलाने के लिए निर्दिष्ट करने वाला एक अतिरिक्त तर्क लेता है (आमतौर पर रूट, लेकिन www-डेटा हो सकता है)।

आपकी लाइन बन जाएगी:

*/5 * * * * www-data php /var/www/public/voto_m/artisan top >/dev/null 2>&1

या आप उपयोगकर्ता www-data के crontab को इसके साथ संपादित कर सकते हैं su:

sudo su -c "crontab -e" www-data

1
वास्तव में दूसरा विकल्प उबंटू के अधिकांश संस्करणों पर काम नहीं करता है
user123

दूसरा विकल्प मेरे लिए 12.04LTS पर काम करता है। शायद यह बाद के संस्करणों पर नहीं है?
'13:

1
14.04 पर दूसरा विकल्प काम नहीं कर रहा है
dgoosens

प्रबंधन में आसानी के लिए, लाइन को /etc/cron.dएक वर्णनात्मक नाम, जैसे , के साथ अपनी फ़ाइल में भी रखा जा सकता है /etc/cron.d/artisan
fkraiem

2
दूसरे विकल्प के लिए इसके बजाय कोशिश करेंsudo su -c "crontab -e" www-data -s /bin/bash
लूनफेल

51

आप -uकिसी विशिष्ट उपयोगकर्ता के लिए एक क्रेस्टैब को संपादित करने के तर्क के साथ क्रॉस्टैब भी चला सकते हैं :

sudo crontab -u www-data -e

यह 14.04 को काम करता है
dgoosens

3

उपयोगकर्ता www-data के रूप में एक crontab चलाने के लिए आप निम्नलिखित कमांड का उपयोग कर सकते हैं:

crontab -u www-data -e

फिर आप एक पंक्ति लिखते हैं, उदाहरण के लिए हर 15 मिनट में एक php फ़ाइल चलाने के लिए:

*/15  *  *  *  * php -f /path_to_cron/cron.php

इसे सहेजते समय, आपको संपादक से पूछा जाएगा:

File Name to Write: /tmp/crontab.HMpG7V 

इसे वहां बचाओ, कोई चिंता नहीं। crontab -eवास्तविक crontab के बजाय / tmp में एक फ़ाइल खोलता है ताकि यह त्रुटियों के लिए आपके नए crontab की जाँच कर सके और आपको उन त्रुटियों के साथ अपने वास्तविक crontab को ओवरराइट करने से रोक सके। यदि कोई त्रुटि नहीं है, तो आपका वास्तविक क्रॉन्ब अपडेट किया जाएगा। अगर crontab -e ने सिर्फ अपने वास्तविक crontab पर सीधे लिखा है, तो आप अपने पूरे crontab को उड़ाने का जोखिम लेंगे।

यह सत्यापित करने के लिए कि आपका क्रोनजॉब चलता है, आप क्रोन लॉग की जांच कर सकते हैं। आम तौर पर /var/log/cron.log या निम्नलिखित कमांड को निष्पादित करने में:

crontab -u www-data -l

यह एक मेरे लिए उबंटू में काम करता था
ट्रिस्टनबेली

यह पहले 4 साल पहले के कोड कमांडर द्वारा सही और अधिक संक्षिप्त रूप से उत्तर दिया गया था। आपने "सुडो" के उपयोग को छोड़ दिया। और क्रोन लाइन के प्रारूप के संबंध में बिना सूचना के फेंक दिया।
हॉरमनएचएच

@ रिचीएच, मुझे सूडो को क्यों जोड़ना चाहिए? किसने कहा कि उपयोगकर्ता पहले से ही रूट के रूप में नहीं चल रहा है? जो कोई भी इस कमांड का उपयोग करता है, उसे यह जानने के लिए पर्याप्त ज्ञान होना चाहिए कि अगर उसे विशेषाधिकारों के साथ कमांड को चलाने की आवश्यकता है, तो उसे सुडो के साथ चलाना होगा, अन्यथा बेहतर स्पर्श नहीं करते हैं .. और आप अधिक स्पष्ट रूप से कहते हैं ...? कोड कमांडर ने सिर्फ कमांड टाइप किया लेकिन कोई और जानकारी नहीं दी
spacebiker

.. अगर आप उस स्मार्ट हैं, तो आप दूसरों के काम की आलोचना करने के बजाय बेहतर जवाब देना शुरू करते हैं, हो सकता है कि तब आपको कुछ प्रतिष्ठा
मिलनी

-1

मैं एक और दृष्टिकोण जोड़ना चाहूंगा। जैसा कि अन्य लोगों ने उल्लेख किया है, उबंटू (16.04 यहाँ) और www-data crontab अविश्वसनीय लगता है (शायद यह एक सुरक्षा की बात है?)।

वैसे भी, हमारी कंपनी में हम आसानी से सुलभ एक सर्वर पर सभी cronjobs की तरह है, तो आप कुछ भी याद नहीं है। एक ही समय में हम सब कुछ (वास्तव में कुछ भी) रूट के रूप में नहीं चलाना चाहते हैं।

इसलिए हम दौड़ते हैं

sudo crontab -e 

जैसा कि आप सामान्य रूप से करते हैं, और फिर हम कमांड को निर्दिष्ट करते हैं

* * * * * /bin/su - www-data -s /bin/bash -c '/path/to/command'

यह क्रोनजॉब को रूट क्रोनोजर फाइल में रखते हुए www (डेटा) के रूप में / पाथ / टू / कमांड को निष्पादित करेगा (और वह हमेशा सही ढंग से चलेगा)। पाइप का उपयोग करके लॉगफाइल्स को रूट (अधिकतम सुरक्षा के लिए) के रूप में लिखने में सक्षम होने का इसका अच्छा लाभ है।

ध्यान दें कि हम अपने पसंदीदा शेल को पारित कर रहे हैं, यह एक सरल शेल के लिए / बिन / श हो सकता है (हम पूरी तरह से बैश क्षमताओं की तरह हैं)। Www-data में एक शेल निर्दिष्ट नहीं है जिससे आपको इसके बिना त्रुटियां मिलेंगी। आम तौर पर क्रोन केवल / बिन / श के साथ नौकरी चलाता है।

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