example.serviceというシステムサービスがあるとしましょう。ファイルを修正して実行すると、systemctl status example.service
次の警告が表示されます。
警告する:ディスクのユニットファイル、ソース設定ファイル、またはexample.serviceのドロップインが変更されました。デバイスをリロードするには、「systemctl daemon-reload」を実行してください。
私が知っている限り、これはsystemctl daemon-reload
systemdに変更を認識させ、systemctl restart example.service
サービスを停止し、新しい設定で起動します。
変更して再起動する必要があるディスクのサービスのリストをどのように取得できますか?
私が知る限り、いいえsystemctl list-units --state changed-on-disk
。次に、良いアイデアは、次のような薄暗いスクリプトでした。
systemctl list-units --type service --no-legend | awk '{ print $1 }' | while read -r service; do
if systemctl status "$service" -n 0 | grep 'changed on disk' -q; then
echo "$service
fi
done
ただし、これは誰かが実行するまでのみ機能しますsystemctl daeomon-reload
。それ以来、警告が消え、実行中のサービスがディスクの構成と一致するかどうかを検出する方法がないようです。
もちろん、すべてを再開することもできますが、そうすると不要なダウンタイムが発生します。
それでは、最良のアプローチは何ですか?