История изменений
Исправление intelfx, (текущая версия) :
Я не совсем понял ситуацию, но думаю, что проблема мне понятна. В юните не указан «тип» программы (директива Type=), и по умолчанию берётся тип «simple».
Если вкратце, то «simple» означает, что systemd будет следить за непосредственно запущенным им процессом, и его завершение будет означать самопроизвольную остановку программы. А в твоём случае непосредственно запускаемый процесс — это стартовый скрипт, который в свою очередь запускает ещё один скрипт (уже другой процесс), а сам завершается. На этом месте systemd считает, что сервис самопроизвольно завершился, и добивает все процессы в контрольной группе.
Я посмотрел на этот скрипт — самым правильным решением было бы избавиться от него совсем, запуская программу непосредственно из юнита. Это несколько проблематично, потому что скрипты там развесистые, но в конечном итоге всё действительно сводится к установке переменных окружения, смене пользователя и запуску некоторой команды. Всё это спокойно делается из самого юнита. Сейчас попытаюсь набросать пример.
Исправление intelfx, :
Я не совсем понял ситуацию, но думаю, что проблема мне понятна. В юните не указан «тип» программы (директива Type=), и по умолчанию берётся тип «simple».
Если вкратце, то «simple» означает, что systemd будет следить за непосредственно запущенным им процессом, и его завершение будет означать самопроизвольную остановку программы. А в твоём случае непосредственно запускаемый процесс — это стартовый скрипт, который в свою очередь запускает ещё один скрипт (уже другой процесс), а сам завершается. На этом месте systemd считает, что сервис самопроизвольно завершился, и добивает все процессы в контрольной группе.
Я посмотрел на этот скрипт — самым правильным решением было бы избавиться от него совсем, запуская программу непосредственно из юнита.
Исходная версия intelfx, :
Я не совсем понял ситуацию, но думаю, что проблема мне понятна. В юните не указан «тип» программы (директива Type=), и по умолчанию берётся тип «simple».
Если вкратце, то «simple» означает, что systemd будет следить за непосредственно запущенным им процессом, и его завершение будет означать самопроизвольную остановку программы. А в твоём случае непосредственно запускаемый процесс — это стартовый скрипт, который в свою очередь запускает ещё один скрипт (уже другой процесс), а сам завершается. На этом месте systemd считает, что сервис самопроизвольно завершился, и добивает все процессы в контрольной группе.
Наиболее правильным решением будет модифицировать скрипт запуска так, чтобы в конце он запускал второй скрипт командой exec
(т. е., например, exec /some/other/script
). Это означает «заменить текущий процесс другой программой». То же самое нужно сделать со вторым скриптом.