LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

Я не совсем понял ситуацию, но думаю, что проблема мне понятна. В юните не указан «тип» программы (директива Type=), и по умолчанию берётся тип «simple».

Если вкратце, то «simple» означает, что systemd будет следить за непосредственно запущенным им процессом, и его завершение будет означать самопроизвольную остановку программы. А в твоём случае непосредственно запускаемый процесс — это стартовый скрипт, который в свою очередь запускает ещё один скрипт (уже другой процесс), а сам завершается. На этом месте systemd считает, что сервис самопроизвольно завершился, и добивает все процессы в контрольной группе.

Я посмотрел на этот скрипт — самым правильным решением было бы избавиться от него совсем, запуская программу непосредственно из юнита. Это несколько проблематично, потому что скрипты там развесистые, но в конечном итоге всё действительно сводится к установке переменных окружения, смене пользователя и запуску некоторой команды. Всё это спокойно делается из самого юнита. Сейчас попытаюсь набросать пример.

Исправление intelfx, :

Я не совсем понял ситуацию, но думаю, что проблема мне понятна. В юните не указан «тип» программы (директива Type=), и по умолчанию берётся тип «simple».

Если вкратце, то «simple» означает, что systemd будет следить за непосредственно запущенным им процессом, и его завершение будет означать самопроизвольную остановку программы. А в твоём случае непосредственно запускаемый процесс — это стартовый скрипт, который в свою очередь запускает ещё один скрипт (уже другой процесс), а сам завершается. На этом месте systemd считает, что сервис самопроизвольно завершился, и добивает все процессы в контрольной группе.

Я посмотрел на этот скрипт — самым правильным решением было бы избавиться от него совсем, запуская программу непосредственно из юнита.

Исходная версия intelfx, :

Я не совсем понял ситуацию, но думаю, что проблема мне понятна. В юните не указан «тип» программы (директива Type=), и по умолчанию берётся тип «simple».

Если вкратце, то «simple» означает, что systemd будет следить за непосредственно запущенным им процессом, и его завершение будет означать самопроизвольную остановку программы. А в твоём случае непосредственно запускаемый процесс — это стартовый скрипт, который в свою очередь запускает ещё один скрипт (уже другой процесс), а сам завершается. На этом месте systemd считает, что сервис самопроизвольно завершился, и добивает все процессы в контрольной группе.

Наиболее правильным решением будет модифицировать скрипт запуска так, чтобы в конце он запускал второй скрипт командой exec (т. е., например, exec /some/other/script). Это означает «заменить текущий процесс другой программой». То же самое нужно сделать со вторым скриптом.