systemd로 하루에 한 번 스크립트 실행


13

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


3
귀하의 요구 사항을 완전히 이해하지 못했습니다. 명확히하십시오. 하루에 컴퓨터 서버 시간을 재부팅하면 스크립트를 처음 재부팅 한 후에 만 ​​실행해야한다는 것을 알고 있습니다. 맞습니까? 컴퓨터가 하루 이상 실행되는 경우 연속해서 스크립트를 실행해야합니까?
Krzysztof Adamski

바로 그거죠. PC를 얼마나 자주 재부팅하는지에 관계없이 매일 백업합니다.
Fu86

5
systemd에 매달리지 않으면 정확하게 anacron입니다.
Gilles 'SO- 악마 중지'

틀릴 수도 있지만 부팅이 완료된 후 10 분만에 스크립트를 실행하도록 anacron을 설정하는 쉬운 방법은 없습니다.
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 분 후에 해당 파일을 실행 한 다음 시스템이 작동하는 동안 매일 실행 됩니다. 같은 날에 여러 번 재부팅하는 경우 백업 스크립트가 아카이브의 mtime을 확인하고 그 날이 지난 날짜보다 짧은 실행을 건너 뛸 수 있습니다.

또한 IO에서 백업이 과중 할 경우 systemd.exec (5) 맨 페이지 의 IOScheduling * 지시문 을 읽는 것이 도움이 될 수 있습니다 .


5

재부팅 사이의 상태를 추적하지 않으므로 systemd에서 완전히 수행 할 수는 없다고 생각합니다. 당신은 easly 부팅 사용 후 10 분 실행 뭔가 예약 할 수 있습니다 systemd.timerOnBootSec=또는 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=dailyPersisten=true최소한 한 번의 누락 된 실행이있는 경우 부팅 시 자정마다 실행합니다.


0

이 문제는 향후 릴리스에서 해결 될 것입니다. 최소한 systemd-devel 메일 링리스트 에서이 이메일에 따르면 . 그 때까지 Krzysztof가 제안한 해킹 방식으로 가야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.