/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ファイルに追加してデーモンをリロードする必要がありますか?
よろしく、
Systemdでは、環境変数宣言を使用してファイルを明示的に呼び出す必要があります。例えば:
[Service]
EnvironmentFile=-/etc/environment
EnvironmentFile =行の「-」は、環境ファイルが存在しない場合にエラーメッセージが生成されないようにします。これらのファイルの多くはsysvinitではオプションであったため、このディレクティブを使用するときは「-」を含める必要があります。
また、必要なことを達成するには、一般的に3つの方法があることに注意してください。
EnvironmentFile=
で参照します。Environment=
を使用して個々のユニットファイル内の環境変数を参照しますDefaultEnvironment
変数、または/etc/systemd/system.conf.d/some-fileのスニペットに配置します。このテーマに関するFedoraのガイド、特に EnrionmentFileセクション を確認してください。