アプリケーション systemctl が httpd.service ファイルの完全な ExecStart 行を実行していません。

アプリケーション systemctl が httpd.service ファイルの完全な ExecStart 行を実行していません。

正確なファイルの場所は次のとおりです。

/etc/systemd/system/multi-user.target.wants/httpd.service

次の内容を反映するようにExecStart行を修正しました。 ExecStart=echo START && echo test > /root/out.txt && echo $OPTIONS > /root/out.txt && echo END && /usr/sbin/httpd $OPTIONS -DFOREGROUND

ご覧のとおり、&&を使用してコマンドを区切ります。サービス出力をデバッグするのに役立つ方法を見つけようとしています。

このように変更した後でも、コマンドを実行すると、システムはまだApacheを起動しますsystemctl start httpd.service。ただし、起動ファイルが修正されたというエラーが発生しますが(大丈夫です)、/root/out.txtファイルが生成されていないため、不明な他の場所から実際の起動行を取得しているようです。誰かがこの動作が発生する理由についてより多くの情報を提供できる場合は、非常に感謝します。

以前は、新しいsystemd / systemctlがリリースされる前に、同じような状況で起動スクリプトが何をしているのかを観察するために、次のコマンドを使用しました。

bash -X /etc/init.d/httpd start

systemctlが示すように、これはオプションではありません。私はApacheだけでなく、他のサービスにも同様のメカニズムを実装したいと思います。これは単なる例です。

ありがとうございます。

ベストアンサー1

systemdサービスファイルを変更したら、次のコマンドを実行してsystemd構成を再ロードする必要があります。

systemctl daemon-reload

これにより、変更が実行されない問題を解決できます。しかし、これはサービスの起動中により多くのタスクを追加する主な問題を解決しません。次に、次のコマンド&&を使用して既存のコマンドを拡張しようとしています。システム文書:

複数のコマンドを指定した場合は、ユニットファイルに表示される順番で呼び出されます。コマンドの1つが失敗した場合(「-」プレフィックスが付いていない)、他の行は実行されず、デバイスは失敗したと見なされます。

ExecStartPre=と線を使用することもできますExecStartPost=

おすすめ記事