Quero executar um script de backup 10 minutos após inicializar minha máquina, mas apenas uma vez por dia. É possível criar esses cenários com o systemd?
Não entendo completamente seus requisitos, por favor, esclareça. Entendo que, se você reiniciar o servidor em um dia, o script deverá ser executado somente após a primeira reinicialização, certo? Se sua máquina funcionar por mais de um dia, o script deve ser executado em dias consecutivos?
Krzysztof Adamski
Exatamente. Farei um backup todos os dias, não importa quantas vezes eu reinicie o meu PC.
Fu86 14/09/12
5
Se você não está desconectado do systemd, é exatamente para isso que serve a anacron.
Gilles 'SO- stop be evil'
Posso estar errado, mas não há uma maneira fácil de configurar o anacron para executar o script apenas 10 minutos após a conclusão da inicialização.
Krzysztof Adamski
Está certo. É por isso que eu estou usando atualmente anacron e o bom e velho a, com um trabalho diário comoecho "obnam backup" | at "now + 10 minutes"
Isso executa o .servicearquivo correspondente 15 minutos após a inicialização e todos os dias enquanto o sistema está ativo. Se você reiniciar várias vezes no mesmo dia, poderá fazer com que o script de backup verifique o horário do arquivo morto e pule a execução se tiver menos de um dia.
Eu não acho que é possível fazer isso totalmente no systemd, pois não controla nenhum estado entre as reinicializações. Você pode agendar facilmente algo para ser executado 10 minutos após o uso da inicialização systemd.timere seu OnBootSec=ou OnStartupSec=.
O próprio script deve verificar se ele já foi executado hoje ou não. Isso pode ser facilmente implementado mesmo no bash, por exemplo:
Aparentemente, esse problema será abordado em versões futuras. Pelo menos de acordo com este e-mail na lista de discussão systemd-devel. Até que você tenha que seguir o caminho hackeado que Krzysztof propôs.
echo "obnam backup" | at "now + 10 minutes"
Respostas:
Veja
/lib/systemd/system/systemd-tmpfiles-clean.timer
:Isso executa o
.service
arquivo correspondente 15 minutos após a inicialização e todos os dias enquanto o sistema está ativo. Se você reiniciar várias vezes no mesmo dia, poderá fazer com que o script de backup verifique o horário do arquivo morto e pule a execução se tiver menos de um dia.Além disso, se seus backups exigirem muito IO, pode ser útil ler sobre as diretivas IOScheduling * na página de manual systemd.exec (5) .
fonte
Eu não acho que é possível fazer isso totalmente no systemd, pois não controla nenhum estado entre as reinicializações. Você pode agendar facilmente algo para ser executado 10 minutos após o uso da inicialização
systemd.timer
e seuOnBootSec=
ouOnStartupSec=
.O próprio script deve verificar se ele já foi executado hoje ou não. Isso pode ser facilmente implementado mesmo no bash, por exemplo:
fonte
Se você não desligar 10 minutos após a inicialização, pode:
OnCalendar=daily
faz com que seja executado toda meia-noite,Persisten=true
na inicialização, se houver pelo menos uma execução perdida.fonte
Aparentemente, esse problema será abordado em versões futuras. Pelo menos de acordo com este e-mail na lista de discussão systemd-devel. Até que você tenha que seguir o caminho hackeado que Krzysztof propôs.
fonte