1

У меня есть следующий файл в /etc/systemd/system/mytest.service

[Unit]
Description=My Test Service
After=network.target

[Service]
Type=forking
User=mytestuser
Group=mytestuser
WorkingDirectory=/opt/mytest

ExecStart=/bin/echo "My Test Start!"

ExecStop=/bin/echo "My Test Stop!"

ExecReload=/bin/echo "My Test Restart!"

[Install]
WantedBy=multi-user.target

После запуска systemctl daemon-reload и systemctl start mytest можно увидеть следующий вывод из journalctl -xe

Jun 29 09:44:57 localhost.localdomain systemd[1]: Starting My Test Service...
-- Subject: Unit mytest.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mytest.service has begun starting up.
Jun 29 09:44:57 localhost.localdomain echo[4370]: My Test Start!
Jun 29 09:44:57 localhost.localdomain echo[4372]: My Test Stop!
Jun 29 09:44:57 localhost.localdomain polkitd[619]: Unregistered Authentication Agent for unix-process:4364:694445 (system bus name :1.149, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_GB.UTF-8) (disconnected from
Jun 29 09:44:57 localhost.localdomain systemd[1]: Started My Test Service.
-- Subject: Unit mytest.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mytest.service has finished starting up.
--
-- The start-up result is done.

Это показывает выполнение команды ExecStart, за которой сразу следует ExecStop, почему это происходит? Чего-то не хватает в моем файле .service?

Спасибо

2 ответа2

0

Ты используешь

Type=oneshot

использование

Type=forking
0

Проблема в том, что echo не разветвляется - никаких дочерних процессов не осталось позади. То, что вам нужно, это сервис с одним oneshot , с RemainAfterExit=true . Если вы просто измените его на oneshot , вы получите точно такое же поведение. Часть RemainAfterExit сообщает, что даже после выхода из ExecStart сервис все равно следует считать работающим, поэтому он не должен запускать ExecStop(s).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .