Executa o Script uma vez por dia com o systemd

10

Eu quero executar um script de backup 10 minutos após a inicialização da minha máquina, mas apenas uma vez por dia. É possível construir esses cenários com o systemd?

    
por Fu86 14.09.2012 / 18:43

3 respostas

9

Veja: /lib/systemd/system/systemd-tmpfiles-clean.timer :

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Isso executa o arquivo .service correspondente 15 minutos após a inicialização e depois todos os dias enquanto o sistema está ativo. Se você reinicializar várias vezes no mesmo dia, poderá fazer com que o script de backup verifique o mtime do archive e pule a execução se tiver menos de um dia de duração.

Além disso, se seus backups forem pesados em IO, pode ser útil ler sobre o IOScheduling * diretivas no systemd.exec (5) manpage.

    
por 08.02.2013 / 06:36
5

Eu não acho que é possível fazer isso inteiramente no systemd, pois ele não rastreia nenhum estado entre as reinicializações. Você pode facilmente agendar algo para executar 10 minutos após a inicialização usando systemd.timer e seu OnBootSec= ou OnStartupSec= .

O script em si tem que verificar se já foi executado hoje ou não. Isso pode ser facilmente implementado mesmo no bash, por exemplo:

#/bin/sh -x
FILE=/etc/lastrun
TODAY='date +"%Y%m%d"'
LASTRUN='cat $FILE'

[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE
    
por 15.09.2012 / 11:37
0

Aparentemente, esse problema será abordado em versões futuras. Pelo menos de acordo com este e-mail na lista de discussão do systemd-devel. Até que você tenha que seguir o caminho que Krzysztof propôs.

    
por 31.07.2013 / 04:47