Embora seja relativamente simples configurar systemd
para iniciar um serviço em um horário específico, como posso fazê-lo parar em um horário diferente?
A ideia seria executar um serviço apenas durante a noite e interrompê-lo pela manhã.
Embora seja relativamente simples configurar systemd
para iniciar um serviço em um horário específico, como posso fazê-lo parar em um horário diferente?
A ideia seria executar um serviço apenas durante a noite e interrompê-lo pela manhã.
Você está correto, que um
systemd
cronômetro é projetado de forma a iniciar um serviço em um horário específico. Então, para fazer parar um serviço, é necessário fazer um workaround.Felizmente, existem várias maneiras de conseguir isso.
Opção 1: Tornar o Serviço A conflitante com o Serviço B
A primeira opção é criar um
oneshot
Serviço B que esteja em conflito com o Serviço A. A vantagem desse método é que ele depende apenas dossystemd
arquivos da unidade, mas a desvantagem é que você precisa modificar o Serviço A (ou criar uma configuração drop-in) .Primeiro, você precisa modificar a configuração do Serviço A, para que entre em conflito com o Serviço B:
Adicione esta configuração de A.service:
Em seguida, crie um B.service que não faça nada:
Este método é retirado deste Q&A .
Opção 2: fazer com que o serviço B simplesmente interrompa o serviço A
Outra opção é criar um
oneshot
Serviço B que simplesmente execute o comando para parar o Serviço A. A vantagem desse método é que você não precisa modificar o Serviço A, mas a desvantagem é que ele depende da execuçãosystemctl
e não apenas dossystemd
arquivos unitários .Para este método, você só precisa criar um B.service, mas desta vez ele executará um comando:
Para ambas as opções, você cria um cronômetro diferente para cada um desses serviços. O Timer A agora iniciará o Serviço A, e o Timer B iniciará posteriormente o Serviço B - interrompendo efetivamente o Serviço A.
Consulte esta sessão de perguntas e respostas para obter mais informações sobre como configurar
systemd
serviços e temporizadores.