systemdユニットのExecStartをデバッグする方法


12

完全に拡張されたExecStart/ExecStopコマンドラインを出力できるかどうか知りたいです。次の例を検討してください。

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

多くの環境変数が含まれるかなり長いコマンドラインがあります。変数の一部が(たとえば、ドロップイン構成によって)正しくなくなった場合、サービスがまったく開始されない可能性があります。ただし、envが置換された完全に展開された行はどこにも表示されず、何が問題なのかを見つけるのに苦労しています。

私はこれをグーグルで操作することができず、今のところ私が見つけた唯一の可能性は/usr/bin/echo、サービス自体の代わりに実行するようにユニットファイルを変更することです。しかし、それは少し面倒です。またはさらに厄介な解決策-すべての環境変数を1つずつ確認してください。

実際に実行しようとしているものをsystemdに強制的に表示させる方法はありますか?

回答:


9

残念ながら組み込みはありません。最終的な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


どうすればいいのかわからなかった。:/ とにかくありがとう。
pystole 2016

2

セクション[サービス]の* .serviceファイル

ExecStartPre=/bin/bash -l -c 'echo "$OPTS_COMMON">/tmp/options.debug'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.