Systemd는 즉시 execstop을 실행합니다.

Systemd는 즉시 execstop을 실행합니다.

직장에서는 시스템 모니터링을 위해 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에서는 작동하지 않습니까?

관련 정보