SystemD के साथ दिन में एक बार स्क्रिप्ट चलाएँ


13

मैं अपनी मशीन को बूट करने के 10 मिनट बाद बैकअप स्क्रिप्ट चलाना चाहता हूं, लेकिन दिन में केवल एक बार। क्या सिस्टमड के साथ इस तरह के परिदृश्य का निर्माण संभव है?


3
मैं आपकी आवश्यकताओं को पूरी तरह से नहीं समझता, कृपया स्पष्ट करें। मैं समझता हूं कि यदि आप एक दिन में अपने मशीन सर्वरल को रिबूट करते हैं, तो स्क्रिप्ट को पहले रिबूट के बाद ही चलना चाहिए, क्या यह सही है? यदि आपकी मशीन 1 दिन से अधिक समय तक चलती है, तो क्या स्क्रिप्ट को लगातार दिनों में चलाया जाना चाहिए?
Krzysztof Adamski

बिल्कुल सही। मैं हर दिन एक बैकअप बनाऊंगा चाहे मैं कितनी बार अपने पीसी को रिबूट करूं।
फू 22:

5
यदि आप सिस्टमड पर लटकाए नहीं गए हैं, तो ठीक यही है कि एनाक्रॉन है।
गिल्स एसओ- बुराई को रोकना '

मैं गलत हो सकता हूं, लेकिन बूट पूरा होने के 10 मिनट बाद स्क्रिप्ट चलाने के लिए एनाक्रॉन सेट करने का कोई आसान तरीका नहीं है।
Krzysztof Adamski

ये सही है। यही कारण है कि मैं वर्तमान में एनाक्रॉन और अच्छे पुराने का उपयोग कर रहा हूं, जैसे कि एक दैनिक काम के साथecho "obnam backup" | at "now + 10 minutes"
एड्रियन क्लर्क

जवाबों:


11

देखें /lib/systemd/system/systemd-tmpfiles-clean.timer:

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

यह .serviceबूट के 15 मिनट बाद और फिर सिस्टम के उठने के बाद हर दिन इसी फाइल को चलाता है। यदि आप एक ही दिन में कई बार रिबूट करते हैं, तो आप बस बैकअप स्क्रिप्ट को संग्रह के समय की जांच कर सकते हैं और उस रन को छोड़ सकते हैं यदि यह एक दिन से कम पुराना है।

इसके अलावा, यदि आपका बैकअप IO पर भारी पड़ने वाला है , तो यह systemd.exec (5) मैनपेज में IOScheduling के निर्देशों के बारे में पढ़ने में मददगार हो सकता है ।


5

मुझे नहीं लगता कि यह पूरी तरह से सिस्टमड में करना संभव है क्योंकि यह रिबूट के बीच किसी भी राज्य को ट्रैक नहीं करता है। आप बूट का उपयोग करने systemd.timerऔर उसके OnBootSec=या उसके बाद 10 मिनट चलाने के लिए आसानी से कुछ शेड्यूल कर सकते हैं OnStartupSec=

स्क्रिप्ट को खुद जांचना होगा कि क्या वह पहले से ही आज भी चल रही है या नहीं। उदाहरण के लिए भी इसे आसानी से लागू किया जा सकता है:

#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`

[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE

1

यदि आप बूट के बाद 10 मिनट तक नहीं लटके हैं, तो आप कर सकते हैं:

[Unit]
Description=...

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar=dailyयह हर आधी रात Persisten=trueको बूट पर चलता है, अगर कम से कम एक गलत रन था।


0

जाहिरा तौर पर इस मुद्दे को भविष्य के रिलीज में संबोधित किया जाएगा। कम से कम systemd-devel मेलिंग सूची पर इस ईमेल के अनुसार । इससे पहले कि आप हैक करने का रास्ता जाना है Krzysztof प्रस्तावित।

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