एक क्रॉन जॉब सेट करना जो एक चामोड / चाउन करता है


9

मैं एक क्रॉन जॉब सेट करना चाहूंगा जो एक डायरेक्टरी (ड्रॉपबॉक्स डायरेक्टरी) पर रीसेंटली एक chmod / chown करता है।

यह तब काम करता है जब मैं मैन्युअल रूप से कमांड निष्पादित करता हूं जैसे:

sudo chown -R $USER ~/Dropbox
sudo chmod -R u+rw ~/Dropbox

मैंने इसे इस तरह क्रोन जॉब में बदलने की कोशिश की:

10      *       *       *       *       sudo chown -R $USER ~/Dropbox

लेकिन यह काम करने के लिए प्रतीत नहीं होता है।

यह कैसे करना है?


incron+ inotifyक्लीनर समाधान होगा :)
फ्रेंज़्लोरेंगन

जवाबों:


9

आप चाहते हैं कि आपकी रूट क्रोन स्क्रिप्ट (रन करके संपादित sudo crontab -eहो):

 55 * * * * /bin/chown -R somename /home/somename/Dropbox && /bin/chmod u+rw /home/somename/Dropbox

मान लिया गया कि उपयोगकर्ता नाम दिया गया है somenameऔर यह /home/somename/Dropboxआपके ड्रॉपबॉक्स निर्देशिका का पूर्ण पथ है। रूट उपयोगकर्ता के रूप में, ~ को जाता है /root


1
स्पष्ट उत्तर के लिए धन्यवाद! मुझे लगता है कि यह मुझे कुछ गुम लिंक दिखाता है जिसकी मुझे तलाश थी। मैं इसे कल पहली बात का परीक्षण करूँगा :)
tvgemert

यह परीक्षण किया है, और यह काम कर रहा है!
टीवीजेमर्ट

2
महान; इसके काम करने में खुशी है। सबक (क) पर्यावरण चर की तरह की उम्मीद नहीं है कर रहे हैं $PATHएक cronjob में एक के उन लोगों के उपयोगकर्ता प्रवेश के बराबर से परिभाषित करने की (जैसे, मेरी linuxbox $ पर गृह परिभाषित किया गया है, लेकिन $ पथ पर सेट है /usr/binऔर /bincrontab और $ USER की ओर से परिभाषित नहीं किया गया है, इसलिए इस मामले में आपको /binchmod / chown से पहले निर्दिष्ट करने की आवश्यकता नहीं थी ), (b) sudoलिपियों में बचने ( rootउपयोगकर्ता के रूप में क्रोन कार्य चलाने ), (c) के रूप में रूट उपयोगकर्ता $HOME/ सामान्य उपयोगकर्ता को रूट नहीं करेगा। , (डी) ~क्रोन लिपियों से बचा जाना चाहिए (डिफ़ॉल्ट रूप से चलाएं #!/bin/sh
ड्रिंक जिंबोब

यदि आप कभी भी इससे अधिक जटिल कुछ भी करते हैं तो मैं डेविड की सलाह के अनुसार एक स्क्रिप्ट डालने की सलाह दूंगा; एक स्क्रिप्ट एक chmod / चाउन के संयोजन के लिए ओवरकिल लगती है। हालांकि, यदि आप अन्य उपयोगकर्ताओं के ड्रॉपबॉक्स या अन्य निर्देशिकाओं पर आवेदन करना शुरू करते हैं या केवल हाल ही में बदली गई फ़ाइलों (जैसे, परिणाम find), आदि से चलाने का निर्णय लेते हैं , तो यह एक स्क्रिप्ट में डालने के लिए समझ में आता है।
डॉ। जिंबाब

16

sudoनिर्धारित कार्यों में लगभग कभी भी उपयोग नहीं किया जाना चाहिए । यह टर्मिनल से बात करने में सक्षम होने की उम्मीद करता है, और ऐसा करने की कोशिश से बचने के लिए विशिष्ट झंडे की आवश्यकता होती है।

अपने क्रॉन जॉब को रूट के रूप में बनाएँ ( /etc/crontabध्यान दें कि इस फ़ाइल का प्रारूप थोड़ा अलग है:) । यह उन प्रणालियों पर काम करने का लाभ भी है जहां स्थापित नहीं है।minute hour mday month wdayusercommand
sudo


धन्यवाद! मैंने इसे बनाया है, लेकिन मैं अभी भी इसके बारे में अनिश्चित हूं। मुझे अपेक्षित परिणाम नहीं मिला: 55 * * * * root chown -R somename ~/Dropbox
tvgemert

3
somenameकहीं भी हो सकता है; यह एक सापेक्ष मार्ग है। दूसरे, ~केवल शेल द्वारा समझा जाता है; उपयोग करें $HOME। इस तरह से एक कमांड का उपयोग करें: chown -R /some/path/somename $HOME/Dropbox(यह rootघर की निर्देशिका का उपयोग करेगा ...)
मेई

@ डेविड: somenameएक रास्ता नहीं है, लेकिन उपयोगकर्ता नाम (और समूह का नाम भी होना चाहिए somename:somegroup
:)

5
@tvgemert क्या दाऊद पथ / संबंधित पथ / प्रतीकात्मक पथ (के बारे में ऊपर कहा (और उसके जवाब में) ~) है अत्यंत महत्वपूर्ण - कृपया क्रॉन और crontab आदमी पृष्ठों के साथ कुछ समय बिताने और यह सुनिश्चित करें कि आप समझते हैं क्या हो रहा है हो सकता है (यदि संदेह में , एक क्रॉन जॉब बनाएं जो यह echo "what you want to do" > /tmp/what-i-would-runसुनिश्चित करें कि परिणाम देखने के लिए सुनिश्चित हों कि वे समझदार हैं - ब्रह्मांड को नष्ट करने की कम संभावना।)
voretaq7

उपयोगी सुझावों के लिए धन्यवाद, मुझे पहले से ही अधिक जानकारी दी!
19

6

दो मुद्दे:

1) पथ सामान्य रूप से क्रोन में सेट नहीं किए जाते हैं जिस तरह से आप लॉग इन करते हैं। कोशिश करें / usr / bin / sudo / bin / chown ... (या जो भी सही पथ आपके सिस्टम पर उन कार्यक्रमों के लिए हैं)।

2) sudo सामान्य रूप से आपका पासवर्ड मांगता है, या अन्यथा बिना रुके दौड़ने से खुश नहीं हो सकता है। मेरा सुझाव है कि आप सूडो के बिना रूट के क्रॉस्टब में कमांड डालते हैं, फिर कमांड रूट के रूप में चलते हैं।


5

आपके crontab के साथ कई समस्याएं हैं:

10 * * * sudo chown -R $USER ~/Dropbox

वाद विषय:

  • sudoयहां इस्तेमाल नहीं किया जाना चाहिए; इसके लिए टर्मिनल इनपुट की आवश्यकता है
  • chownपूरी तरह से निर्दिष्ट किया जाना चाहिए (यानी, /bin/chown)
  • USERएक वास्तविक चर के रूप में मौजूद नहीं हो सकता है; कुछ सिस्टम उपयोग करते हैंLOGNAME
  • ~(टिल्ड) केवल एक शेल द्वारा पहचाना जाएगा - एक नंगे chownइसे समझ नहीं पाएगा
  • मूल के क्रॉस्टेब में होम निर्दिष्ट करना रूट के घर पर जाता है

मुझे लगता है कि मैं वास्तव में इसे स्क्रिप्ट करूँगा:

#!/bin/bash

# FILE: /usr/local/bin/myscript

USER=$1
eval chown -R $1 ~$1/Dropbox
eval chmod -R u+rw ~$1/Dropbox

( तबeval बदलने के ~$1लिए आवश्यक है ।)~user /home/user

इस स्क्रिप्ट को रूट के क्रॉस्टैब से चलाएं:

# root's crontab
10 * * * /usr/local/bin/myscript someuser

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