systemdサービスのグループをリロードするにはどうすればよいですか?


12

私がしたいリロード(再起動しないで!)イベント時にサービスのグループ。

私は私のSSL証明書を更新した場合、私は、用途はそれらを再ロードするすべてのサービスをしたい(nginxpostfix心に来ます)。また、特定のサーバー上のどのサービスがSSL証明書を使用するかを覚えておきません。それらが構成されたときにそれらをグループ化するのに十分でなければなりません。

一方.serviceで、パッケージで提供されるファイルの変更は避けたいと思います。更新中に手動での介入が必要になるためです。

どうすればそれを達成できますか?

リクエストに応じてサービスのグループ停止するオプションがありますが、これによりサービスに 1、2秒、またはそれ以上アクセスできなくなり、修正されるまで停止したままになる場合があります。それを買う余裕はない。


私はあなたが本命の展開が、ここでは、ほとんどのオートマジック更新のための事前のフックとポストフックであるかどうかはわかりません /opt/letsencrypt/letsencrypt-auto renew --pre-hook "service nginx stop; service postfix stop; service squid stop" --post-hook "service nginx start; service postfix start; service squid start" も:certmongerはpostsaveとpresaveコマンドを持っている
ヤコブ・エヴァンス

@JacobEvansそれは私が使うものです!以前は、certbotの構成ファイルパーサーに問題がありました:セミコロンを許可していませんでした。したがって、コマンドライン引数を使用するか、一度に実行する必要がありました。現在、このすべてが不必要に行われています。
sanmai

あなたが作る場合.serviceのように、ファイルの編集をオーバーライドしますが、更新の問題を回避することができます。 インストールされたファイルを変更sudo systemctl edit foo.serviceするので/etc/systemd/system/foo.service.d/override.confはなく、変更をfoo.service保存します。
quixotic 2017

回答:


21

/etc/systemd/system/ssl-reload.target以下の内容で作成してください。

[Unit]
Description=Services which need reloaded with SSL certs are updated.
PropagatesReloadTo=nginx postfix

次に、別のファイルを作成します。 /etc/systemd/system/ssl-reload.path

[Unit]
Description=Restart services which use SSL when the cert directory changes

[Path]
PathChanged=/path/to/your/ssl/certs/dir

[Install]
WantedBy=multi-user.target

次に:

systemctl enable ssl-reload.path
systemctl start ssl-reload.path

そうは言っても、SSLディレクトリの何かを変更した後、目的のサービスが自動的に再ロードされるはずです。

自動動作が必要ない場合は、.pathファイルを使用せず、systemctl reload ssl-reload.targetSSLファイルを変更した後に手動で発行してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.