स्क्रिप्ट चलाने के लिए उपयोगकर्ता को क्रॉस्टैब में कैसे निर्दिष्ट करना है? [बन्द है]


176

मेरे पास कुछ क्रेबट नौकरियां हैं जो रूट के तहत चलती हैं, लेकिन इससे मुझे कुछ समस्याएं होती हैं। उदाहरण के लिए, उस क्रॉन जॉब की प्रक्रिया में बनाए गए सभी फ़ोल्डर उपयोगकर्ता रूट और ग्रुप रूट के अंतर्गत हैं। उपयोगकर्ता www-data और group www-data के तहत चलाने के लिए मैं इसे कैसे बना सकता हूं जब मैं अपनी वेबसाइट से स्क्रिप्ट चलाता हूं तो मैं उन फ़ोल्डरों और फाइलों में हेरफेर कर सकता हूं?

मेरा सर्वर उबंटू पर चलता है।
वर्तमान crontab नौकरी है:

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

जवाबों:


335

रूट उपयोगकर्ता के रूप में चलाने के लिए एक कॉन्ट्राब बनाने के बजाय, उस उपयोगकर्ता के लिए एक कॉन्टैब बनाएं, जिसे आप स्क्रिप्ट चलाना चाहते हैं। आपके मामले में, crontab -u www-data -ewww-data उपयोगकर्ता के लिए crontab को संपादित करेगा। बस अपना पूरा कमांड वहाँ रखें और इसे रूट उपयोगकर्ता के क्रॉस्टैब से हटा दें।


54
यह उसी तरह काम करता है जब आप crontab -eविशिष्ट उपयोगकर्ता के रूप में उपयोग करते हैं ।
कुलाक

7
लेकिन क्या इस क्रेस्टैब को सिस्टम स्टार्ट-अप या केवल तभी लॉग इन किया जाएगा जब उपयोगकर्ता लॉग इन करता है?
ब्रूनो फिंगर

11
cronपर * nix सिस्टम को किसी विशिष्ट उपयोगकर्ता के क्रॉस्टैब में निर्दिष्ट नौकरियों को चलाने के लिए उपयोगकर्ता को लॉगिन करने की आवश्यकता नहीं होती है।
माइक

2
क्या यह समूह आईडी भी सेट करेगा जैसा कि ओपी ने पूछा था? क्या होगा यदि समूह जो चाहता है वह उपयोगकर्ता के प्राथमिक समूह से अलग है?
आस्काइल

49

संपादित करें: ध्यान दें कि यह विधि crontab -e के साथ काम नहीं करेगी, लेकिन केवल तभी काम करती है जब आप सीधे / etc / crontab को संपादित करते हैं। अन्यथा, आपको एक त्रुटि मिल सकती है/bin/sh: www-data: command not found

कार्यक्रम के नाम से ठीक पहले:

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

यह अपाचे के रूप में चला जाएगा उपयोगकर्ता चुड़ैल www-data सही है?
अरमा

19
ध्यान दें कि यह विधि काम नहीं करेगी crontab -e, लेकिन केवल तभी काम करती है जब आप /etc/crontabसीधे संपादित करते हैं। अधिक जानकारी के लिए इस फ़ाइल के शीर्ष पर टिप्पणी पढ़ें।
imgx64

5
उपयोगकर्ता केवल सिस्टम crontab में निर्दिष्ट किया जा सकता है
जेम्स रोथ

मैं सिस्टम crontab पर अनुसूची पर कुछ काम है। जब मैं करता हूं sudo crontab -e, तो मैं नौकरियों को देखता हूं। लेकिन मैं फ़ाइल खोलता हूँ /etc/crontabकोई नौकरी नहीं है। क्या यह अजीब है? यदि मैं sudo crontab -eनिर्दिष्ट उपयोगकर्ता के साथ नौकरी जोड़ूं, तो क्या यह काम करेगा?
eNeMetcH

14

चूंकि आप उबंटू चल रहे हैं, आपका सिस्टम क्रॉस्टैब स्थित है /etc/crontab

रूट उपयोगकर्ता (या sudo का उपयोग करके) के रूप में, आप बस इस फ़ाइल को संपादित कर सकते हैं और उस उपयोगकर्ता को निर्दिष्ट कर सकते हैं जिसे इस कमांड को चलाना चाहिए। यहाँ सिस्टम crontab में प्रविष्टियों का प्रारूप है और आपको अपनी कमांड कैसे दर्ज करनी चाहिए:

# m h dom mon dow user  command
*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

बेशक आपकी php स्क्रिप्ट और आपकी लॉग फ़ाइल की अनुमतियाँ सेट होनी चाहिए ताकि www-dataउपयोगकर्ता के पास उनकी पहुँच हो।


मैंने सोचा कि यह crontab -eहालांकि के बराबर होना चाहिए ; लेकिन नहीं।
झिंग

5
उबंटू डॉक्स ने संपादन / आदि / क्रॉस्टैब की सिफारिश नहीं की है क्योंकि इसे अपडेट द्वारा अधिलेखित किया जा सकता है। crontab -e एक उपयोगकर्ता-विशिष्ट क्रोन फ़ाइल / var / स्पूल / cron / crontabs में बनाएगा।
हेम

9

आप runuserएक अलग उपयोगकर्ता के रूप में एक कमांड चलाने के लिए (रूट के रूप में) का उपयोग करने का भी प्रयास कर सकते हैं

*/1 * * * * runuser php5 \
            --command="/var/www/web/includes/crontab/queue_process.php \
                       >> /var/www/web/includes/crontab/queue.log 2>&1"

यह सभी देखें: man runuser


runuserउबंटू में शामिल नहीं है।
रैप्टर

1
runuser, Ubuntu के नवीनतम संस्करण में है। रनर के विकल्प भी हैं जैसा कि इस उत्तर में चर्चा की गई है unix.stackexchange.com/questions/169441/ubuntu-runuser-command , जैसे su और sudo।
रसेल ई ग्लाउ जूल

8

माइक का सुझाव "सही तरीका" जैसा लगता है। मैं इस थ्रेड के माध्यम से उपयोगकर्ता को vncserverरिबूट के तहत चलने के लिए निर्दिष्ट करना चाहता था और अपने सभी क्रोन नौकरियों को एक जगह पर रखना चाहता था।

मुझे VNC क्रोन के लिए निम्नलिखित त्रुटि मिल रही थी:

vncserver: The USER environment variable is not set. E.g.:

मेरे मामले में, मैं यह sudoनिर्दिष्ट करने में सक्षम था कि कार्य को किसके रूप में चलाया जाए।

@reboot sudo -u [someone] vncserver ...

1
मुझे लॉग पर यह संदेश मिला:sudo: sorry, you must have a tty to run sudo
Renato Gama

@renatoargh आप शायद RedHat पर चल रहे हैं। Unix.SE पर इस उत्तर पर एक नज़र डालें।
kaiser
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.