서비스를 시작하기 전에 pid 파일을 삭제하는 가장 좋은 방법은 무엇입니까?

서비스를 시작하기 전에 pid 파일을 삭제하는 가장 좋은 방법은 무엇입니까?

종료할 때 항상 pid 파일을 삭제하지 않는 서비스가 있습니다. 그래서 다시 시작하면 실패합니다. 내 시스템은 RHEL 7.2 시스템이고 내가 원하는 것은 시스템이 부팅하기 전에 파일을 찾고 발견되면 삭제하도록 하는 것입니다. systemctl을 사용하여 이 모든 작업을 수행해야 하거나 누군가 실행하기 전에 수행해야 합니다 systemctl start <service>. 사용하고 싶은 명령이 있는데 원활한 프로세스를 위해 systemctl과 통합하는 방법을 잘 모르겠습니다. 이것은 명령입니다:

[ -f /var/run/dir/file.pid ] && echo "Found and removing" && rm -f /var/run/dir/file.pid || echo "Not Found"

이것을 /usr/lib/systemd/system/에 있는 서비스 파일에 붙여 넣을 수 있습니까? 그렇다면 어디에 놓을까요? 입력해야 하는 파일의 내용입니다. 우리는 그것을 dns.service라고 부를 것입니다.

[Unit]
Description=DNS daemon
BindTo=dns.service
After=syslog.target network.target dns.service
ConditionPathExists=/etc/dns/dns.conf

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/dns
ExecStart=/usr/sbin/dns -u dns -g dns -f   /etc/dns/dns.conf -d -P 17500
Restart=on-abort

[Install]
WantedBy=network.target

이것이 이 작업을 수행하는 올바른 방법인 것 같습니까, 아니면 더 좋은 방법이 있습니까?

답변1

맞춤 서비스는 그대로 유지되어야 합니다 /etc/systemd/system.

이제 당신이 그렇게 하고 있으니 forking, 내가 할 일은 그 PIDFile=지시문을 사용하는 것입니다. 서비스가 중지되면 파일이 삭제됩니다. 그러나 시작 시에는아니요파일에 씁니다. 그것을 작성하는 것은 귀하의 서비스에 달려 있습니다. 권장되는 쓰기 위치는 입니다 /run.

관련 정보