Як налагодити системний блок ExecStart


13

Мені цікаво, чи можу я роздрукувати повністю розширений ExecStart/ExecStopкомандний рядок. Розглянемо наступний приклад:

ExecStart=/usr/bin/java $OPTS_COMMON $OPTS $OPTS_LOG $OPTS_DEBUG some.class.Start --param1 ${PARAM1} --param2 ${PARAM2}

У мене є досить довгі командні рядки з великою кількістю змінних середовища. Якщо частина змінних стає неправильною (наприклад, за допомогою конфігурації, що випадає), сервіс може взагалі не запуститися. Однак я ніде не бачу повністю розширеного рядка із заміненими envs і намагаюся з’ясувати, що не так.

Мені не пощастило погуглити це, і поки що єдина можливість, яку я знайшов, - це змінити файловий модуль для запуску /usr/bin/echoзамість самої служби. Але це трохи втомило. Або ще більш дратівливе рішення - перевіряйте кожну змінну середовища одна за одною.

Чи є спосіб, як змусити systemd показати мені, що насправді намагаються запустити?

Відповіді:


10

На жаль, немає побудованого способу. Щоб побачити остаточний ExecStart, ви можете увімкнути налагодження. Відредагуйте файл /etc/systemd/system.confта встановіть LogLevel=на debug. Тоді ви побачите щось на кшталт:

java.service About to execute: /usr/bin/java $OPTS_COMMON...Це не вирішує вашу проблему, але добре побачити заміну специфікатора systemd. https://www.freedesktop.org/software/systemd/man/systemd.unit.html(specifiers)

Але якщо ви дійсно хочете дійти до нижньої частини заміни аргументів, вам слід заглянути тут: https://github.com/systemd/systemd/blob/7ce9cc154576e342015eab8c1500790a9ededc01/src/core/execute.c#L2570


Я трохи боявся, що немає способу зробити це. :/ Все одно, дякую.
пістолія

2

У файлі * .service у розділі [Сервіс]

ExecStartPre=/bin/bash -l -c 'echo "$OPTS_COMMON">/tmp/options.debug'

Не працювало для мене. У файлі немає вмісту.
Макс Леске
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.