Removendo um temporizador criado com “systemd-run --on-calendar”

2

Eu criei uma tarefa do systemd usando systemd-run --on-calendar .... Agora eu a coloquei com os arquivos .timer e .service apropriados. Mas eu não sou capaz de remover o antigo. Eu posso pará-lo e desativá-lo, mas quando eu chamo systemctl list-timers ele ainda aparece com seu nome arbitrário run-r0d0dc22 .... Eu também procurei por seu arquivo .timer , mas eu não o achei.

    
por Jörg Mäder 11.08.2017 / 15:47

2 respostas

1

Os arquivos transitórios acabam em /run/user/ e parecem não ser removidos até que o usuário efetue logout (por systemd-run --user ) ou até a reinicialização, quando /run é recriado.

Por exemplo, se você criar um comando para executar apenas uma vez em um determinado momento:

systemd-run --user --on-calendar '2017-08-12 14:46' /bin/bash -c 'echo done >/tmp/done'

Você receberá arquivos de sua propriedade em /run :

/run/user/1000/systemd/user/run-28810.service
/run/user/1000/systemd/user/run-28810.service.d/50-Description.conf
/run/user/1000/systemd/user/run-28810.service.d/50-ExecStart.conf
/run/user/1000/systemd/user/run-28810.timer
/run/user/1000/systemd/user/run-28810.timer.d/50-Description.conf
/run/user/1000/systemd/user/run-28810.timer.d/50-OnCalendar.conf

Para não --user , os arquivos estão em /run/systemd/system/

Você pode remover os arquivos, fazer um systemctl [--user] daemon-reload e então list-timers mostrará apenas o nome da Unidade, com seu último histórico, se já tiver sido executado. Esta informação é provavelmente mantida dentro do status interno do systemd ou arquivos de diário.

    
por 12.08.2017 / 15:47
0

A resposta aceita (remover os arquivos e fazer um daemon-reload ) não funcionou para mim - em vez disso, consegui remover o timer usando systemd --user stop unitfile ; isso pode ser diferente, pois eu já estava usando um arquivo de unidade.

Como minha pergunta, "Systemd as at replacement" foi marcada como "duplicata exata", eu a excluo e postarei o conteúdo abaixo.

Gostaria de usar o systemd como at . Eu criei um arquivo de unidade em ~/.config/systemd/user/[email protected] que executa um script de shell (passando "% I"), mas estou tendo problemas para agendá-lo. Se eu usar systemd-run --user --unit say@'test message' --on-calendar='13:54' , ele manterá o timer ativo para ser executado amanhã também, em vez de excluí-lo depois que ele for executado.

Como devo instruir o systemd a executar um arquivo de unidade exatamente uma vez em um horário específico hoje? Eu gostaria de uma solução que limpe automaticamente o temporizador transitório, então eu não tenho que systemd --user stop say@'test message' depois.

Resposta: Eu tive que especificar a data completa. Então - ... --on-calendar='2018-04-16 13:54:00' . Isso parece limpar-se adequadamente também.

    
por 16.04.2018 / 21:17