systemdでの環境設定

systemdでの環境設定

私はDebian 8を使用しており、サービスでJAVA_HOMEを設定する必要があります。私はこれをスクリプトにしたので、システムは常に同じではないので、最初にシステムに問い合わせる必要があります。コマンドラインでは、ExecStart行は正しく機能しますが、このサービスに入れると機能しません。私は受け取った:

Aug 12 17:03:16 debian jsvc[6761]: Invalid option -f
Aug 12 17:03:16 debian jsvc[6761]: Cannot parse command line arguments
Aug 12 17:03:16 debian systemd[1]: App1.service: control process exited, code=exited status=1
Aug 12 17:03:16 debian systemd[1]: Failed to start App1.
-- Subject: Unit App1.service has failed

私のサービス:

[Unit]
Description=App1
After=syslog.target


[Service]
ExecStart=/usr/bin/jsvc -user root -home ${readlink -f /usr/bin/java | sed "s:bin/java::"} -cp /usr/share/java/commons-daemon.jar:/usr/local/app1.jar -pidfile /var/run/app1 -pidfile
Type=forking

ベストアンサー1

実行行はスペースで区切られ、各単語はコマンドの引数として渡されます。最も簡単な解決策は、コマンド全体を一重引用符で囲み、/bin/bash -cコマンドの前に以下を追加することです。

ExecStart=/bin/bash -c 'exec /usr/bin/jsvc -user ... -pidfile'

最初に使用すると、-cvどの行が渡されたかをログで確認できます。また、systemdが拡張されないことを$()望まないと仮定します。${}

おすすめ記事