vim /home/mytest.sh
rm -f /home/mytest/*
Eu quero escrever um serviço para executar a ação de remoção.
Minhas expectativas:
sudo systemctl stop mytest
posso excluir arquivos em /home/mytest
sudo systemctl start mytest
não fazer nada.
Edite meu arquivo service.
sudo vim /etc/systemd/system/mytest.service
[Unit]
Description=delete file
[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/bin/bash /home/mytest.sh
[Install]
WantedBy=multi-user.target
Habilitá-lo.
sudo systemctl enable mytest
Agora encontrei uma ação estranha para o serviço mytest.
sudo systemctl start mytest
pode excluir arquivos em /home/mytest
sudo systemctl stop mytest
não fazer nada.
Por quê? Fundamentos dar uma explicação em detalhes.
Isso é explicado em detalhes na documentação do serviço systemd , mas você precisa ler tudo para entender o que está acontecendo. A parte mais pertinente neste caso é o exemplo 3; a partir disso, o leitor pode concluir que um serviço oneshot como você declarou nunca se torna ativo, portanto, sua ação de parada será executada assim que sua ação de início for concluída.
Para conseguir o que você procura, você precisa de um serviço único que, no entanto, se torne ativo:
Basicamente,
systemd
rastreia todos os processos iniciados por meio de cgroups e, a menos que você especifiqueRemainAfterExit=yes
, não manterá as informações de estado "sim, mytest.service foi executado e deve ser considerado ainda ativado, embora não haja processos restantes em seu cgroup."Sem
RemainAfterExit=yes
,systemctl stop mytest
fazsystemd
só dar uma olhada nosystemd/system.slice/mytest.service
cgroup, e como não tem processos nele, ele só pensa "parece que já tá parado, então... nada pra fazer aí!"