ฉันต้องการรันสคริปต์สำรอง 10 นาทีหลังจากบู๊ตเครื่อง แต่เพียงวันละครั้ง เป็นไปได้หรือไม่ที่จะสร้างสถานการณ์ขึ้นด้วย systemd?
echo "obnam backup" | at "now + 10 minutes"
ฉันต้องการรันสคริปต์สำรอง 10 นาทีหลังจากบู๊ตเครื่อง แต่เพียงวันละครั้ง เป็นไปได้หรือไม่ที่จะสร้างสถานการณ์ขึ้นด้วย systemd?
echo "obnam backup" | at "now + 10 minutes"
คำตอบ:
ดู/lib/systemd/system/systemd-tmpfiles-clean.timer
:
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
ซึ่งจะเรียกใช้.service
ไฟล์ที่เกี่ยวข้อง15 นาทีหลังจากบู๊ตแล้วทุกวันในขณะที่ระบบอัพ หากคุณรีบูตหลายครั้งในวันเดียวกันคุณสามารถให้สคริปต์สำรองตรวจสอบเวลาของไฟล์เก็บถาวรและข้ามไปที่เรียกใช้หากไฟล์นั้นมีอายุน้อยกว่าหนึ่งวัน
นอกจากนี้หากการสำรองข้อมูลของคุณจะหนักบน IO มันอาจเป็นประโยชน์ในการอ่านเกี่ยวกับคำสั่งIOScheduling *ในsystemd.exec (5) manpage
ฉันไม่คิดว่าเป็นไปได้ที่จะทำสิ่งนี้อย่างสมบูรณ์ใน systemd เนื่องจากไม่ได้ติดตามสถานะระหว่างการรีบูต คุณ easly สามารถกำหนดเวลาการบางสิ่งบางอย่างเพื่อให้ทำงานได้ 10 นาทีหลังจากบูตใช้systemd.timer
และหรือOnBootSec=
OnStartupSec=
สคริปต์จะต้องตรวจสอบว่ามันทำงานแล้ววันนี้หรือไม่ สิ่งนี้สามารถนำไปใช้ได้ง่ายแม้ใน bash ตัวอย่างเช่น:
#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`
[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE
หากคุณไม่ได้วางสาย 10 นาทีหลังจากบู๊ตคุณสามารถ:
[Unit]
Description=...
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
OnCalendar=daily
ทำให้มันทำงานทุกเที่ยงคืนPersisten=true
ในการบู๊ตหากมีการพลาดอย่างน้อยหนึ่งครั้ง
เห็นได้ชัดว่าปัญหานี้จะได้รับการแก้ไขในรุ่นอนาคต อย่างน้อยตามอีเมลนี้ในรายการส่งเมล systemd-devel ก่อนหน้านั้นคุณต้องไปตามวิธีที่แฮ็กเสนอให้ Krzysztof