मैं अपनी मशीन को बूट करने के 10 मिनट बाद बैकअप स्क्रिप्ट चलाना चाहता हूं, लेकिन दिन में केवल एक बार। क्या सिस्टमड के साथ इस तरह के परिदृश्य का निर्माण संभव है?
echo "obnam backup" | at "now + 10 minutes"
मैं अपनी मशीन को बूट करने के 10 मिनट बाद बैकअप स्क्रिप्ट चलाना चाहता हूं, लेकिन दिन में केवल एक बार। क्या सिस्टमड के साथ इस तरह के परिदृश्य का निर्माण संभव है?
echo "obnam backup" | at "now + 10 minutes"
जवाबों:
देखें /lib/systemd/system/systemd-tmpfiles-clean.timer:
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
यह .serviceबूट के 15 मिनट बाद और फिर सिस्टम के उठने के बाद हर दिन इसी फाइल को चलाता है। यदि आप एक ही दिन में कई बार रिबूट करते हैं, तो आप बस बैकअप स्क्रिप्ट को संग्रह के समय की जांच कर सकते हैं और उस रन को छोड़ सकते हैं यदि यह एक दिन से कम पुराना है।
इसके अलावा, यदि आपका बैकअप IO पर भारी पड़ने वाला है , तो यह systemd.exec (5) मैनपेज में IOScheduling के निर्देशों के बारे में पढ़ने में मददगार हो सकता है ।
मुझे नहीं लगता कि यह पूरी तरह से सिस्टमड में करना संभव है क्योंकि यह रिबूट के बीच किसी भी राज्य को ट्रैक नहीं करता है। आप बूट का उपयोग करने 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