जवाबों:
Crontab में कमांड को निष्पादित किया जाता है, /bin/sh
ताकि आप अंकगणितीय विस्तार का उपयोग करके गणना कर सकें कि वर्तमान मिनट modulo 25% नोटबुक है:
*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command
cron
इस पूरी प्रविष्टि को हर 5 मिनट में चलाएगा, लेकिन केवल अगर वर्तमान मिनट (एपोक के बाद के मिनटों में) modulo 25 बराबर शून्य यह चलेगा your_command
।
के रूप में अन्य लोगों ने बताया है, 1 दिन नहीं समान रूप से 25 मिनट से विभाज्य है, इसलिए इस का कारण नहीं बनेगा है your_command
हर दिन एक ही समय में चलाने के लिए, लेकिन यह होगा कि हर 25 मिनट चलाते हैं।
आपका सबसे अच्छा दांव 20 मिनट या 30 मिनट पर चलना है।
आप अगला सर्वश्रेष्ठ हर 5 मिनट में ट्रिगर कर सकते हैं, और फिर एक आंतरिक गिनती या टाइमस्टैम्प रख सकते हैं, और हर 5 वें ट्रिगर को चला सकते हैं, या यदि अंतिम रन के बाद 25 मिनट बीत चुके हैं।
अधिक जटिल एक दिन के लिए सही समय पर काम करना, आधी रात से शुरू करना और दिन के अंत में त्रुटि को स्वीकार करना होगा। इसमें अलग-अलग घंटों में क्रॉस्टैब प्रविष्टि को डुप्लिकेट करना शामिल है।
इससे अधिक जटिल पूरे महीने के लिए कई बार काम करना होगा, जिसमें विभिन्न संयोजनों को कवर करने के लिए क्रॉस्टैब प्रविष्टि की कई प्रतियां शामिल होंगी।
अंत में आप अपने खुद के हमेशा डेमॉन पर लागू कर सकते हैं, और शेड्यूलिंग करते हैं।
मेरे पास इसके साथ कोई प्रत्यक्ष अनुभव नहीं है, लेकिन fcron वह करता है जो आप बॉक्स से बाहर करना चाहते हैं। इसके प्रलेखन के अनुसार आप आवृत्तियों को निर्दिष्ट कर सकते हैं:
# Get our mails every 30 minutes
@ 30 getmails -all
# make some security tests every 48 hours of system up time,
# force a mail to be sent to root even if there is no output
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh
@ 25 command
चाहिए और चाल चलनी चाहिए।
मुझे संक्षेप में बताएं कि यहां क्या समस्या है। मिनट फ़ील्ड में 25 दर्ज cron
करने से वर्तमान समय का मिनट 25 के बराबर हो जाता है, जो कि एक घंटे में एक बार होता है। आप मैचों की एक सूची दर्ज कर सकते हैं, समस्या यह है कि 60 (एक घंटे का मिनट) 25 से विभाज्य नहीं है, इसलिए आपको घंटे के आधार पर कई प्रविष्टियां जोड़ने की आवश्यकता है। 60 और 25 का न्यूनतम सामान्य गुण 300 है, जो कि 5 * 60 है। इसलिए आपको अपनी मूल शुरुआत तक लौटने तक 5 घंटे तक साइकिल चलाना होगा। उदाहरण के लिए:
0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...
लेकिन यहाँ फिर से, 24 (दिन में एक घंटे) 5 से विभाजन योग्य नहीं है, 5 और 24 में से कम से कम आम कई है बस 5 * 24 = 120. और इतने पर और ...
आप किसी फ़ाइल के अंतिम संशोधन समय के साथ खेल सकते हैं
एक छोटी स्क्रिप्ट बनाएं (उदाहरण के लिए /usr/local/bin/age
) जो एक फ़ाइल की आयु का उत्पादन करेगी:
#bin/sh
echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
आपका कॉन्टैब इस तरह दिखेगा (यदि मैं सही हूं तो 25 मिनट 1500 सेकंड के बराबर होता है)
* * * * * [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500 ] && touch /var/tmp/your_command.offset && your_command
ध्यान दें कि मैं /var/tmp
इसके बजाय उपयोग करता हूं /tmp
क्योंकि FHS के अनुसार इसे सिस्टम शटडाउन / स्टार्टअप पर डिलीट नहीं किया जाना चाहिए।
मुझे लगता है कि निम्नलिखित को 0 0/25 * * * काम करना चाहिए?