2008-10-01 10 views
8

क्रॉन स्थापना है विक्सी-क्रॉनबैश स्क्रिप्ट खोल से चलता है, लेकिन नहीं क्रॉन जॉब से

/etc/cron.daily/rmspam.cron

#!/bin/bash 
/usr/bin/rm /home/user/Maildir/.SPAM/cur/*; 

मैं इस सरल बैश स्क्रिप्ट है कि मैं एक क्रॉन जॉब को जोड़ना चाहते हैं (यह भी स्पैम शामिल पहले सीखने के आदेश) लेकिन यह हिस्सा हमेशा "फ़ाइल या निर्देशिका नहीं मिला" के साथ विफल रहता है जो मुझे लगता है कि क्रॉन नौकरी के रूप में चलाने पर मेटाचर को सही तरीके से इंटरपरेट नहीं किया जा रहा है। अगर मैं कमांडलाइन से स्क्रिप्ट निष्पादित करता हूं तो यह ठीक काम करता है।

मैं इस काम नहीं कर के लिए और निश्चित रूप से एक काम कर समाधान क्यों एक चाहते हैं :)

धन्यवाद

# 1 वापस इस सवाल जब मैं इसके लिए लोकप्रिय सवाल बैज मिला है के लिए आया था संपादित करें। मैं पहली बार ऐसा किया,

#!/bin/bash 
find /home/user/Maildir/.SPAM/cur/ -t file | xargs rm 

और अभी हाल ही में xargs आदमी पृष्ठ के माध्यम से पढ़ रहे हैं और इस

#!/bin/bash 
find /home/user/Maildir/.SPAM/cur/ -t file | xargs --no-run-if-empty rm 

कम xargs विकल्प के लिए इसे बदल दिया गया था -r

+0

कृपया अपने क्रॉन्टाब से लाइन को संपादित और जोड़ें। –

+0

उन्होंने नीचे एक टिप्पणी में उल्लेख किया है कि यह /etc/cron.daily –

उत्तर

14

यदि निर्देशिका में कोई फ़ाइल नहीं है, तो वाइल्डकार्ड का विस्तार नहीं किया जाएगा और सीधे आदेश पर भेजा जाएगा। "*" नामक कोई फ़ाइल नहीं है, और तब कमांड "फ़ाइल या निर्देशिका नहीं मिली" के साथ विफल रहता है। इसके बजाय इसे आजमाएं:

if [ -f /home/user/Maildir/.SPAM/cur/* ]; then 
    rm /home/user/Maildir/.SPAM/cur/* 
fi 

या बस "-f" ध्वज को आरएम में उपयोग करें। इस कमांड के साथ दूसरी समस्या तब होती है जब कमांड लाइन की अधिकतम लंबाई के लिए बहुत अधिक स्पैम होता है। कुछ इस तरह शायद बेहतर समग्र है:

find /home/user/Maildir/.SPAM/cur -type f -exec rm '{}' + 

आप एक पुराने लगता है कि केवल अधिकारियों एक समय में एक फ़ाइल RM हों:

find /home/user/Maildir/.SPAM/cur -type f | xargs rm 

कि बहुत सारी फ़ाइलें के साथ ही कोई भी फ़ाइलें संभालती है। खोजने के लिए + विकल्प को खोजने के लिए चार्ल्स डफी के लिए धन्यवाद।

+0

अनुमान लगाने के बजाय पथ खोजने के लिए कौन सा आरएम उपयोग करूंगा, असल में, आपको नए पर्याप्त खोज के साथ xargs की आवश्यकता नहीं है: ढूंढें /home/user/Maildir/.SPAM/cur -type f -exec rm - f '{}' '+' –

+0

को \ n के साथ खोज अंत नहीं होना चाहिए; ? – hop

+0

फ़ाइलों को हटाने का इतना लगातार कार्य है कि 'ढूंढ' '-delete' कार्रवाई का भी समर्थन करता है। '-exec आरएम' {} ''करने की कोई स्पष्ट आवश्यकता नहीं है। – ulidtko

0

आप पूर्ण पथ निर्दिष्ट कर रहे हैं है cronjob में लिपि के लिए?

00 3 * * * /home/me/myscript.sh 

बजाय

00 3 * * * myscript.sh 

एक और नोट पर, यह /bin/rm मैं के लिए उपयोग किया linux बक्से के सभी पर है। क्या आपने डबल-चेक किया है कि यह वास्तव में /usr/bin/rm आपकी मशीन पर है?

+0

में है स्क्रिप्ट /etc/cron.daily/ में स्थित है जिसे/etc/crontab – Tanj

+0

हम्म में संबोधित किया गया है। यह बहुत अजीब है। –

+0

यह डिफ़ॉल्ट तरीका है कि vixie-cron एक gentoo distro पर सेट है। या यह/bin/rm है हालांकि/usr/bin/rm के लिए एक लिंक है। शायद अगली बार मैं – Tanj

0

अपने क्रॉन फ़ाइल के शीर्ष पर

[email protected] 

जोड़ने और आप आप पर भेज दिया किसी भी इनपुट/त्रुटियों मिलना चाहिए कोशिश।

इसके अलावा एक cronjob

0 30 * * * /usr/bin/rm /home/user/Maildir/.SPAM/cur/* 
0

एक शक्ति विकल्प का उपयोग करने की कोशिश करो और rm कमांड के पथ को जोड़ने के बारे में भूल के रूप में आदेश जोड़ने पर विचार करें। मुझे लगता है कि यह आवश्यक नहीं किया जाना चाहिए ...

rm -f 

यह सुनिश्चित होगा कि भले ही निर्देशिका में कोई फ़ाइलें हैं, rm कमांड असफल नहीं होंगे। यदि यह एक शेल स्क्रिप्ट का हिस्सा है, * * काम करना चाहिए। मुझे लगता है कि आपके पास एक खाली डीआईआर हो सकता है ...

मैं समझता हूं कि बाकी की लिपि निष्पादित की जा रही है, है ना?

0

rm वास्तव में /usr/bin/ में आपके सिस्टम पर स्थित है? मैंने हमेशा सोचा है कि rm/bin/ में रहना चाहिए।

संबंधित मुद्दे