Tôi muốn chạy tập lệnh sao lưu 10 phút sau khi khởi động máy nhưng chỉ một lần một ngày. Có thể xây dựng các kịch bản như vậy với systemd?
echo "obnam backup" | at "now + 10 minutes"
Tôi muốn chạy tập lệnh sao lưu 10 phút sau khi khởi động máy nhưng chỉ một lần một ngày. Có thể xây dựng các kịch bản như vậy với systemd?
echo "obnam backup" | at "now + 10 minutes"
Câu trả lời:
Xem /lib/systemd/system/systemd-tmpfiles-clean.timer
::
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Điều này chạy .service
tệp tương ứng 15 phút sau khi khởi động và sau đó mỗi ngày trong khi hệ thống hoạt động. Nếu bạn khởi động lại nhiều lần trong cùng một ngày, bạn có thể có tập lệnh sao lưu kiểm tra thời gian lưu trữ và bỏ qua hoạt động đó nếu nó chưa đến một ngày.
Ngoài ra, nếu các bản sao lưu của bạn sẽ nặng về IO, có thể hữu ích khi đọc về các chỉ thị IOSchedcing * trong trang web systemd.exec (5) .
Tôi không nghĩ có thể làm điều này hoàn toàn trong systemd vì nó không theo dõi bất kỳ trạng thái nào giữa các lần khởi động lại. Bạn easly có thể lên lịch một cái gì đó để chạy 10 phút sau khi khởi động sử dụng systemd.timer
và nó OnBootSec=
hay OnStartupSec=
.
Bản thân kịch bản phải kiểm tra xem nó đã được chạy ngày hôm nay hay chưa. Điều này có thể dễ dàng thực hiện ngay cả trong bash, ví dụ:
#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`
[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE