
プロセスを開始する前に実行する必要がある必須の非システムプロセスがあることを認識するようにシステム化する方法が見つかりませんでした。たとえば、Upstartでは、次のようにできます。
if pgrep -f bin/postgres
私が見つけた最も近いのは、ロックファイルを見つけることができる「パスベースのアクティベーション」ですが、時にはロックファイルが孤児になるので、それは間違いなく保証されません。
私はsystemdを使用していないすべてのプロセスを書き換えて、今使用したくありません。この方法で特定のプロセスだけを開始したいと思います。
そのようなオプションがないのでしょうか、それとも私が見つけられなかったのでしょうか?
答え1
私が考える最善の選択はデリックのフィッシュ&チップスコメントに記載されている内容:ExecStartPre
:
# ...
[Service]
ExecStartPre=/usr/bin/pgrep -f bin/postgres
# ...
これには次のガイドラインが適用されます。
ExecStartPre =は長期実行プロセスを開始するために使用しないでください。
…pgrep
完了すると終了するからです。また、リストされたプロセスが存在するときにサービスが開始されることを許可し、リストされたプロセスが存在しない場合にサービスが開始されないようにすることによって、所望の機能を達成する。
必要なプロセスがないときにサービスを手動で開始しようとすると、次の結果が表示されます。
制御プロセスがエラーコードで終了したため、デモサービスの操作に失敗しました。詳細については、「systemctl status deco.service」および「journalctl -xe」を参照してください。