Systemd PathExists=는 Unit=? 내에서 추적 파일이 제거되면 작동하지 않습니다.

Systemd PathExists=는 Unit=? 내에서 추적 파일이 제거되면 작동하지 않습니다.

나는 간단한 systemd.path를 가지고 있습니다 restart.path:

[Unit]
Description=

[Path]
PathExists=/home/ubuntu/restart
Unit=restart.service

[Install]
WantedBy=multi-user.target

그리고 트리거된 restart.service서비스는 다음과 같습니다.

[Unit]
Description=

[Service]
ExecStartPre=echo PREPARING TO RESTART...
ExecStart=true
ExecStopPost=echo OK
ExecStopPost=/bin/rm -f /home/ubuntu/restart

[Install]
WantedBy=multi-user.target

동작은 다음과 같습니다. touch restart PREPARING TO RESTART... OK 실제로 restart파일이 사라집니다. 하지만 파일을 다시 생성하려고 하면 아무 일도 일어나지 않습니다. 그러면 다음 과 같이 touch restart 됩니다 rm restart.touch restartrestart.servicerestart path

이에 대한 문서는 매우 모호하며 궁극적으로 왜 이런 일이 발생하고 어떻게 해결하는지 이해할 수 없습니다. 문서를 만들 때 restart.service마다 실행 되기를 원합니다 .restart

답변1

당신의 restart.service:

[Unit]
Description=

[Service]
Type=simple
ExecStartPre=echo PREPARING TO RESTART...
ExecStart=/bin/rm -f /home/ubuntu/restart

즉, 이 ExecStopPost=라인을 사용하지 말고 해당 섹션도 사용하지 마십시오 [Install]. 해당 restart.path유닛만 활성화해야 하기 때문입니다.

  • restart.service⚠️ 기기가 비활성화되어 있는지 확인하세요앞으로위와 같이 변경하십시오. 그렇지 않으면 systemd는 위와 같이 여전히 활성화되어 있다고 생각하고 변경 후에도 비활성화할 수 없습니다. (설치부분 누락으로 인해)

관련 정보