web-dev-qa-db-ja.com

Unix / Linux-サービスユニットファイルは/ etc / environmentに設定された環境変数を認識できません

/etc/environmentで環境変数を正しく設定しています

/etc/profileの変更により、正しく読み込まれることを確認しました。確認のためにエコーすることができます。

しかし、サービスのユニットファイルを作成すると、環境変数がないために失敗します。ただし、通常はスクリプトを単独で開始できます。

これが私のサービスユニットファイルです:

[Unit]
Description=Zookeeper unit for this machine
AssertPathExists=/opt/kafka
[Service]
Type=simple
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh

journalctlは、Javaが見つからないことを示していますが、Javaは、bashから直接起動すると簡単に見つかる$ Java_HOMEパスを介して存在します。

私は管理者ユーザーではありません:)ですから、おそらくここでばかげた間違いが起こっています。誰かアドバイスしてもらえますか? system.confファイルに追加してデーモンをリロードする必要がありますか?

よろしく、

1
hagubear

Systemdでは、環境変数宣言を使用してファイルを明示的に呼び出す必要があります。例えば:

[Service]
EnvironmentFile=-/etc/environment

EnvironmentFile =行の「-」は、環境ファイルが存在しない場合にエラーメッセージが生成されないようにします。これらのファイルの多くはsysvinitではオプションであったため、このディレクティブを使用するときは「-」を含める必要があります。

また、必要なことを達成するには、一般的に3つの方法があることに注意してください。

  1. 上記のように、変数の割り当てをファイル(/ etc/environmentなど)に入れ、そのファイルをユニットごとにEnvironmentFile=で参照します。
  2. Environment=を使用して個々のユニットファイル内の環境変数を参照します
  3. 変数の割り当てを/etc/systemd/system.confのDefaultEnvironment変数、または/etc/systemd/system.conf.d/some-fileのスニペットに配置します。

このテーマに関するFedoraのガイド、特に EnrionmentFileセクション を確認してください。

4
baelx