Skip to content

Instantly share code, notes, and snippets.

@saez0pub
Last active March 5, 2016 15:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save saez0pub/e1169b3688744b9a843b to your computer and use it in GitHub Desktop.
Save saez0pub/e1169b3688744b9a843b to your computer and use it in GitHub Desktop.
detect and restart systemctl units after a full upgrade Oo
- name: restart systemctl units with deleted files when upgraded
shell: find /proc/*/fd/ -xtype f ! -exec file {} \; | grep -P '^/proc/[0-9]+/fd/[0-9]+{{ ":" }} broken symbolic link to /.*(deleted)' | sed -e 's/^\/proc\/\([0-9][0-9]*\)\/fd\/[0-9][0-9]*{{ ":" }} broken symbolic link to \(\/.*\) (deleted)/\1 \2/' | grep -v -e ' /tmp/' -e '(deleted)' |cut -d ' ' -f1 | sort -u | while read pid; do systemctl status $pid --no-pager -n0 --no-legend | grep '^ *Loaded\{{ ":" }} loaded (/usr/lib/systemd/' | sed -e 's/^ *Loaded\{{ ":" }} loaded (//' -e 's/;.*//' -e 's/.*\///'; done | sort -u
register: restartUnits
failed_when: restartUnits.stderr
when: "systemUpgraded | changed"
@saez0pub
Copy link
Author

saez0pub commented Mar 5, 2016

root@test [~]# time find /proc/*/fd/ -xtype f  ! -exec file {} \; | grep -P '^/proc/[0-9]+/fd/[0-9]+: broken symbolic link to /.*(deleted)'  | sed -e 's/^\/proc\/\([0-9][0-9]*\)\/fd\/[0-9][0-9]*: broken symbolic link to \(\/.*\) (deleted)/\1 \2/' | grep -v -e ' /tmp/' -e '(deleted)' |cut -d ' '  -f1 | sort -u | while read pid; do systemctl status $pid --no-pager -n0 --no-legend | grep '^ *Loaded\: loaded (/usr/lib/systemd/' | sed -e 's/^ *Loaded\: loaded (//' -e 's/;.*//' -e 's/.*\///'; done | sort -u

real    0m2.630s
user    0m1.900s
sys 0m0.200s
root@test [~]# time find /proc/*/fd/ -type l 2>/dev/null | grep -P '^/proc/[0-9]+/fd/' | while read fd; do ls -l $fd 2>/dev/null; done | grep deleted | sed -e 's/.* \/proc\/\([0-9][0-9]*\).*-> \(.*\) (deleted)/\1 \2/' | grep -v -e '^[0-9]* /tmp/'  -e '(deleted)'  | sort -u | while read pid; do systemctl status $pid --no-pager -n0 --no-legend | grep '^ *Loaded\: loaded (/usr/lib/systemd/' | sed -e 's/^ *Loaded\: loaded (//' -e 's/;.*//' -e 's/.*\///'; done | sort -u

real    0m18.504s
user    0m13.080s
sys 0m4.000s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment