How do I know if systemctl daemon-reload needs to be run
You can check loaded unit by command systemctl show <unit>.service
. As far I know there is no tool to check changes in unit files.
As well you could run this bash command for var in $(systemctl | grep running | awk '{print $1}'); do systemctl status $var | grep "changed on disk" | grep ".service"; done
it would show what files has been changed.
Example:
[root@centos-linux atolkachev]# for var in $(systemctl | grep running | awk '{print $1}'); do systemctl status $var | grep "changed on disk" | grep ".service"; done
Warning: nginx.service changed on disk. Run 'systemctl daemon-reload' to reload units.
systemd
doesn't provide out of the box support for displaying changed unit files, but you can use a bash script like this:
while read unit; do
systemctl status $unit 2>&1 | awk '/changed on disk/ {print $2}'
done< <(systemctl list-unit-files | grep \.service | awk '{print $1}')
This line will do systemctl daemon-reload if needs to be run:
for service in $(systemctl | grep running | grep .service | awk '{print $1}'); do ! test "$mayreload" && systemctl status $var 2>&1 | grep -q "changed on disk" && && mayreload=1 && echo reloading systemctl && systemctl daemon-reload ; done