직장에서는 시스템 모니터링을 위해 Nagios를 실행합니다. Nagios 데이터를 postgresql 데이터베이스에 저장하기 위해 Python 스크립트를 작성했습니다. 이것은 centos 7.6에서 실행됩니다. systemd 서비스 파일을 사용하면 스크립트를 시작하고 아무 문제 없이 다시 시작할 수 있습니다(어떤 이유로든 종료해야 하는 경우). 특정 위치의 파일에 기록하여 제어된 방식으로 스크립트를 중지할 수 있습니다. 수동으로 중지하면 제대로 작동하지만 systemd를 통해 사용하려고 하면 작동하지 않습니다.
내 서비스 파일은 다음과 같습니다.
[Unit]
Description=Nagiosdata to postgresql
After=postgresql-12.service
[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/local/nagios/libexec/importdata
StandardInput=null
User=nagios
Restart=on-failure
RestartSec=30s
TimeoutStopSec= 180
ExecStop=/usr/bin/touch <file to stop the process>
[Install]
WantedBy=multi-user.target
TimeoutStopSec 및 ExecStop(아래 참조)을 추가하면 systemd는 프로세스를 시작한 직후 제어 파일을 작성하므로 프로세스가 다시 중지됩니다. 유형을 분기로 설정하려고 시도했지만(대화식으로 실행하면 내 스크립트가 전경에서 실행되기 때문에 내가 아는 한 올바르지 않습니다) 동일한 결과를 얻었습니다.
systemctl status dataimport를 수행할 때 ExecStop 줄이 없으면 상태가 "활성"(실행 중)이라는 것을 알았습니다. ExecStop을 사용하면 내 상태가 "활성"(종료)입니다.
다른 작업을 수행해야 합니까, 아니면 CentOS 7.6의 systemd 219에서는 작동하지 않습니까?