vim /home/mytest.sh
rm -f /home/mytest/*
삭제 작업을 수행하는 서비스를 작성하고 싶습니다.
내 기대:
sudo systemctl stop mytest
/home/mytest의 파일을 삭제하고 아무 작업도 수행할 수
sudo systemctl start mytest
없습니다.
내 서비스 파일을 편집합니다.
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
활성화하십시오.
sudo systemctl enable mytest
이제 mytest 서비스에 이상한 동작이 있음을 발견했습니다.
sudo systemctl start mytest
/home/mytest에 있는 파일을 삭제하고
sudo systemctl stop mytest
아무 작업도 수행할 수 없습니다.
왜? 자세히 설명해주세요.
답변1
이에 대해 자세히 설명되어 있습니다.시스템 서비스 문서, 하지만 무슨 일이 일어나고 있는지 이해하려면 거의 모든 내용을 읽어야 합니다. 이 예제에서 가장 관련성이 높은 부분은 예제 3입니다. 선언한 일회성 서비스는 결코 활성화되지 않으므로 시작 작업이 완료되면 중지 작업이 실행된다는 점을 독자는 이해할 수 있습니다.
목표를 달성하려면 여전히 활성화된 일회성 서비스가 필요합니다.
[Unit]
Description=delete file
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=/bin/bash /home/mytest.sh
[Install]
WantedBy=multi-user.target
답변2
기본적으로 systemd
cgroup을 통해 시작되는 모든 프로세스를 추적하고 RemainAfterExit=yes
"예, mytest.service가 실행 중이며 해당 cgroup에 남은 프로세스가 없더라도 여전히 활성화된 것으로 간주되어야 합니다."를 지정하지 않는 한 상태 정보를 유지하지 않습니다.
RemainAfterExit=yes
그렇지 않다면 cgroup만 보고 프로세스가 없기 때문에 그냥 "정지된 것 같으니... 거기서는 할 일이 없어!"라고 생각합니다 systemctl stop mytest
.systemd
systemd/system.slice/mytest.service