Systemd Timer Confusion

0

Eu tenho um programa em execução via Systemd e estou tentando descobrir como iniciá-lo / interrompê-lo em determinados momentos. É um programa persistente (transmissão).

Atualmente, tenho um crontab com as seguintes linhas:

0 8 * * * systemctl stop transmission-daemon
0 20 * * * systemctl start transmission-daemon

Estou com dificuldades para traduzir isso para um arquivo de timer do Systemd.

Além disso, é possível ter o systemd (ou cron) verificando se o serviço deve estar rodando ou não baseado na hora atual no caso de uma reinicialização?

Obrigado pela sua ajuda, se isso foi perguntado antes, por favor me aponte para exemplos específicos de exatamente esse tipo de coisa. A maior parte do que posso encontrar é como executar um serviço em intervalos de 15 minutos e similares.

    
por Eric Wolf 22.09.2016 / 19:36

2 respostas

0

Pode ser mais simples ter um cronômetro que execute um script uma vez por hora e na reinicialização, e esse script verifica se a hora atual é aquela em que o daemon deve estar em execução ou não e, se necessário (possivelmente após uma systemctl is-active $service check) inicia ou interrompe o serviço. Esse script também pode verificar se há um arquivo ou agir em outra lógica de negócios para determinar se as coisas precisam estar em execução ou não, por exemplo, um arquivo touch ~/.fooservice-do-not-run pode desativar coisas, ou se a carga for muito alta, etc.

    
por 22.09.2016 / 21:21
0

Para iniciar serviços através de temporizadores no systemd, você usa dois arquivos de unidade. Um arquivo X.service para descrever o serviço atual, e um arquivo X.timer para descrever quando o serviço deve ser iniciado.

Para ativar e desativar um serviço como você descreve, o melhor que consigo pensar é ter um par separado de Xoff de arquivos unitários, onde os arquivos serviço são mutuamente conflito entre si. O serviço Xoff não faz nada, está lá para "correr" quando o serviço real está desligado.

Para se ter uma ideia, aqui está um exemplo de brinquedo com um serviço sleep que é ativado a cada minuto, e desligado a cada minuto ímpar.

sleep.service:

[Unit]
Description=Test service not doing anything real.
Conflicts=sleepoff.service

[Service]
ExecStart=/usr/bin/sleep 1d

sleep.timer:

[Unit]
Description=Timer to start the sleep service.

[Timer]
OnCalendar=*:0/2

sleepoff.service:

[Unit]
Description=Dummy service "running" when the real unit is off.
Conflicts=sleep.service

[Service]
Type=oneshot
ExecStart=/usr/bin/true
RemainAfterExit=true

sleepoff.timer:

[Unit]
Description=Timer to stop the sleep service.

[Timer]
OnCalendar=*:1/2
    
por 25.09.2016 / 20:55