systemd initスクリプトで変数を使用する

systemd initスクリプトで変数を使用する

私はSysVinitとsystemd用の初期化スクリプトを私たちのパッケージの1つと一緒に配布しました(ネットワークサービス用の非対話型バックグラウンドデーモンを実行する必要があります)。インストーラは、ユーザーにサービスをインストールするかどうかを尋ねます。その場合は、デーモンのユーザーとホームディレクトリを作成し、正しいスクリプト(プロセス1のイメージ名によって異なります)を正しい場所にコピーします。

一部の詳細は、ユーザーの特定の構成や会社のポリシー(ツールがどこにインストールされているのか、デーモンユーザーを何と呼ぶべきか、彼のホームディレクトリはどこにあるべきか)によって異なります%%TOOL_USER%%。はsedを通してそれを置き換えました。自動機能はCentOSとDebianで動作するため、すでに満足しています。

ただし、もちろん、すべてのシステムが少しずつ異なるため、顧客は手動でサービスをインストールすることを選択できます(たとえば、syslogを使用しない場合、または通常は一部の顧客のようにより高いセキュリティレベルを持つ場合)。この場合、初期化スクリプトを調整する必要があります。

の場合システム初期化これは基本的にシェルスクリプトで、3つの変数を入力したので簡単です。

user=%%TOOL_USER%%
executable=%%TOOL_EXEC%%
working_dir=%%TOOL_HOME%%

上部にいくつかの構成のヒントがあります。

一方、systemdはカスタム変数を設定して参照する可能性を見つけることができませんでした。したがって、私ができることは、ユーザーにすべての項目を%%TOOL_*%%適切な値に置き換えるように指示することだけです。私は一般的に新しいシステムスクリプトがどのように機能するかが好きですが、これで、ユーザーがイベントを見逃す可能性のある初期化スクリプトなど、より安全なアプローチを好みます。私が逃した部分がありますか?

参考にしてみるとfreedesktop.org systemd.service ドキュメント

答え1

(参照)を使用して、環境変数を保存するファイルを宣言できますEnvironmentFile=man systemd.execEnvironmentFileは、変数に基づいてツールによって生成されたファイルであり、ファイルはsystemd手動で管理されたファイルです。

環境変数を設定したら、アプリケーションが適切に応答できるようにする必要があります。

関連情報