システムinitrdイメージで単純なデーモンプロセスを実行する必要があります。 system.initrdの文書によると、systemdがinitrdで直接実行されると、デフォルトプロセスがcharswitch-root
以外の場合は実行中のすべてのプロセスが終了します。私が見つけた唯一の変更方法は、アプリケーションのソースコードに正しい説明を追加することです。ただし、残念ながらこれは独自のソフトウェアなので、対応するソースコードにアクセスできません。また、シェルコマンドがパラメータを変更して別の名前でプロセスを実行できることもわかりました。それで、新しいプロセスを配布するsystemd用の簡単なサービスファイルを作成しましたが、それは動作してサービスプロセスが正しい名前で実行されていることを示しています()。前述のように、文字で始まるプロセスはで終了しないでください。argv[0][0]
@
argv[0]
exec
argv[0]
exec
ps aux
@bin/process-name ...
argv[0]
@
switch-root
私のシステムレシピ:
[Unit]
Description=Simple service
[Service]
ExecStart=/bin/bash -c 'exec -a "@bin/process-name" /bin/application'
switch-root
以前は、initrdフェーズでサービスを手動で有効にしてサービスが稼働していることを確認しましたが、他の実行中のプロセスと同様にサービスが終了しました。通常のアプリケーションとして実行してみましたが、うまくいきませんでした。私もそれを変更した独自のアプリを書いて、argv[0][0]
それ@
が死ぬ前のように動作しましたswitch-root
。それでは、initrdで永続サービスをどのように実行しますか? systemdは、switch-root
終了してはならない特別なプロセスでさえも残さず、すべてのプロセスを終了するようです。
Initrd: Dracut
OS: Debian Jessie
Systemd version: 208-8
源泉:http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons/