systemd를 사용하여 하루에 한 번 스크립트 실행

systemd를 사용하여 하루에 한 번 스크립트 실행

컴퓨터를 시작한 후 10분 후에 백업 스크립트를 실행하고 싶지만 하루에 한 번만 실행하고 싶습니다. systemd를 사용하여 이러한 시나리오를 구축할 수 있습니까?

답변1

바라보다: /lib/systemd/system/systemd-tmpfiles-clean.timer:

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

이렇게 하면 .service시작 후 15분 후에 파일이 실행되고 그 다음에는 시스템 시작 시 매일 실행됩니다. 같은 날 여러 번 재부팅하는 경우 백업 스크립트가 아카이브의 실행 시간을 확인하고 하루가 지나지 않은 경우 실행을 건너뛰도록 할 수 있습니다.

또한 백업에 많은 IO가 필요한 경우 다음 내용을 읽어 보는 것이 도움이 될 수 있습니다.iOS 스케줄링*지침시스템 실행(5)맨페이지.

답변2

재부팅 사이의 상태를 추적하지 않기 때문에 systemd에서는 이 작업을 완전히 수행하는 것이 불가능하다고 생각합니다. systemd.timer이를 사용하거나 OnBootSec=시작 후 10분 후에 실행되도록 쉽게 예약할 수 있습니다 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

답변3

시작 후 10분 후에도 끊김이 없으면 다음을 수행할 수 있습니다.

[Unit]
Description=...

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar=dailyPersistent=true매 자정마다 실행 하거나 적어도 하나가 실행을 놓친 경우 시작 시 실행하십시오 .

답변4

분명히 이 문제는 향후 버전에서 수정될 것입니다. 적어도 따르면이것systemd-devel 메일링 리스트에 이메일을 보내세요. 그때까지는 Krzysztof가 제안한 해킹에 의존해야 합니다.

관련 정보