저는 systemd를 사용하는 CentOS 7에서 ASSP를 실행하고 있습니다. 내가 찾을 수 있는 유일한 미리 만들어진 서비스 파일(Howtoforge.com)는 맞는지 확실하지 않은 일회성 유형을 사용합니다. 더 중요한 것은 stop 명령이 내가 실행 중인 모든 Perl 프로그램을 종료시키는 것 같다는 것입니다(그래서 나는 그것을 주석 처리했습니다). 하지만 이제는 종료 시 제대로 중지되는지 확신할 수 없습니다. 서비스 파일을 개선하는 방법에 대해 누군가 조언을 해 줄 수 있습니까?
[Unit]
Description=AntiSpam SMTP Proxy
After=network.target
[Service]
Type=Simple
Environment=PERL5LIB=/root/perl5/lib/perl5/
ExecStartPre=-rm -f /usr/local/assp/pid
ExecStart=/usr/bin/perl /usr/local/assp/assp.pl /usr/local/assp/
ExecStopPost=-rm -f /usr/local/assp/pid
[Install]
WantedBy=multi-user.target
답변1
Type=oneshot
데몬이든 아니든 지속적으로 실행되는 프로그램에는 적합하지 않습니다. 그래서 당신 말이 맞습니다. 당신은 실제로 또 다른 나쁜 인터넷 튜토리얼을 발견했습니다(악명 높은 사이트에서, 그 튜토리얼에는 다른 많은 문제도 있습니다).
assp의 wiki에서 샘플 init 스크립트를 검토한 결과, 프로그램이 포그라운드에서 실행되고 자체적으로 데몬화되지 않는 것으로 보입니다. Type=simple
(기본값)은 이러한 종류의 서비스에 적합합니다.
systemd는 이미 중지할 프로세스를 알고 있으므로 일반적으로 서비스 에 회선 ExecStop=
이 필요하지 않습니다 . Type=simple
비정상적인 중지 절차가 있는 경우에만 필요하지만 asp는 다른 프로세스와 마찬가지로 신호를 받아들이고 종료합니다. 이 줄은 생략할 수 있습니다.
이러한 문제 외에도 줄이 중복되었습니다 ExecStartPre=
. 아마도 한 번만 필요할 것입니다. WorkingDirectory=
이전 스타일의 init 스크립트에서도 마찬가지로 assp를 설치한 디렉토리로 설정하고 싶을 수도 있습니다 .