#!/bin/bash TMP="/tmp" DELETED="$TMP/restart.deleted" OWNED="$TMP/restart.owned" UPDATED="$TMP/restart.updated" UNITS="$TMP/restart.units" lsof -n | awk '{ if ($5 == "DEL" || $10 == "(deleted)") print $9,$2; }' | sort -uk 1,2 > $DELETED find /var/db/pkg/ -name CONTENTS | xargs cat | awk '{ if ($1 != "dir") print $2; }' | xargs realpath 2> /dev/null | sort > $OWNED join $DELETED $OWNED | awk '{ print $2 }' | sort -gu > $UPDATED (for pid in $(cat $UPDATED) ; do systemctl status $pid | head -n 1 done) | sort -u > $UNITS if [ -s $UNITS ] ; then ( echo "Restarting units:" for unit in $(awk '{print $2}' $UNITS) ; do if ( echo $unit | grep $( ls -1 /etc/autorestart/ignore.d/* | sed -e 's/^/-f /' ) > /dev/null ) ; then echo "Skipping $unit" else systemctl restart $unit systemctl status $unit fi echo done ) | mailx -a "Content-Type: text/plain; charset=utf-8" \ -s "$(hostname) systemd units requiring restart" $(whoami) fi rm -f $TMP/restart.*