Я запускаю ASSP на CentOS 7, который использует systemd. Единственный готовый файл службы, который я смог найти (howtoforge.com) использует тип oneshot, в правильности которого я не уверен. Что еще важнее, команда 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, можно сделать вывод, что программа работает на переднем плане и не демонизирует себя. Type=simple
(по умолчанию) подходит для такого рода служб.
Строка ExecStop=
обычно не требуется для Type=simple
службы, так как systemd уже знает, какой процесс остановить. Она может потребоваться только для чего-то с необычной процедурой остановки, но assp просто принимает сигнал и завершается, как любой другой процесс. Эту строку можно пропустить.
Помимо этих проблем, вы продублировали ExecStartPre=
строку. Вероятно, она вам понадобится только один раз. Вы также можете захотеть установить WorkingDirectory=
в каталог, в который вы установили assp, так как старый сценарий init также делал это.