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
. 그 이후에는 경고가 사라지고 실행 중인 서비스가 디스크의 구성과 일치하는지 여부를 감지할 방법이 없는 것 같았습니다.
물론 모든 것을 다시 시작할 수도 있지만 그렇게 하면 불필요한 가동 중지 시간이 발생하게 됩니다.
그렇다면 가장 좋은 접근 방식은 무엇입니까?