รันสคริปต์วันละครั้งด้วย systemd


13

ฉันต้องการรันสคริปต์สำรอง 10 นาทีหลังจากบู๊ตเครื่อง แต่เพียงวันละครั้ง เป็นไปได้หรือไม่ที่จะสร้างสถานการณ์ขึ้นด้วย systemd?


3
ฉันไม่เข้าใจความต้องการของคุณอย่างเต็มที่โปรดชี้แจง ฉันเข้าใจว่าหากคุณรีบูตเครื่องในเวลาเซิร์ฟเวอร์ในหนึ่งวันสคริปต์ควรทำงานหลังจากรีบูตครั้งแรกเท่านั้นใช่ไหม หากเครื่องของคุณทำงานนานกว่า 1 วันสคริปต์ควรทำงานในวันติดต่อกันหรือไม่
Krzysztof Adamski

เผง ฉันจะสำรองข้อมูลทุกวันไม่ว่าฉันจะรีบูตเครื่อง PC บ่อยแค่ไหน
Fu86

5
หากคุณไม่ได้วางสายใน systemd นี่คือสิ่งที่แอนนารอนใช้
Gilles 'หยุดความชั่วร้าย'

ฉันอาจผิด แต่ไม่มีวิธีง่ายๆในการตั้งค่า anacron ให้เรียกใช้สคริปต์เพียง 10 นาทีหลังจากบูตเสร็จสมบูรณ์
Krzysztof Adamski

ถูกตัอง. นั่นเป็นเหตุผลที่ฉันกำลังใช้ anacron และคนชราที่มีงานประจำทุกวันเช่นecho "obnam backup" | at "now + 10 minutes"
Adrien Clerc

คำตอบ:


11

ดู/lib/systemd/system/systemd-tmpfiles-clean.timer:

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

ซึ่งจะเรียกใช้.serviceไฟล์ที่เกี่ยวข้อง15 นาทีหลังจากบู๊ตแล้วทุกวันในขณะที่ระบบอัพ หากคุณรีบูตหลายครั้งในวันเดียวกันคุณสามารถให้สคริปต์สำรองตรวจสอบเวลาของไฟล์เก็บถาวรและข้ามไปที่เรียกใช้หากไฟล์นั้นมีอายุน้อยกว่าหนึ่งวัน

นอกจากนี้หากการสำรองข้อมูลของคุณจะหนักบน IO มันอาจเป็นประโยชน์ในการอ่านเกี่ยวกับคำสั่งIOScheduling *ในsystemd.exec (5) manpage


5

ฉันไม่คิดว่าเป็นไปได้ที่จะทำสิ่งนี้อย่างสมบูรณ์ใน 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

1

หากคุณไม่ได้วางสาย 10 นาทีหลังจากบู๊ตคุณสามารถ:

[Unit]
Description=...

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar=dailyทำให้มันทำงานทุกเที่ยงคืนPersisten=trueในการบู๊ตหากมีการพลาดอย่างน้อยหนึ่งครั้ง


0

เห็นได้ชัดว่าปัญหานี้จะได้รับการแก้ไขในรุ่นอนาคต อย่างน้อยตามอีเมลนี้ในรายการส่งเมล systemd-devel ก่อนหน้านั้นคุณต้องไปตามวิธีที่แฮ็กเสนอให้ Krzysztof

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.