Skip to content
checkservices 1.33 KiB
Newer Older
Seblu's avatar
Seblu committed
#!/bin/bash
Seblu's avatar
Seblu committed

Seblu's avatar
Seblu committed
# Copyright © Sébastien Luttringer
Seblu's avatar
Seblu committed
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

# Check running systemd services for binary update
# Convenient way to restart updated systemd service after upgrade
Seblu's avatar
Seblu committed

(( $UID != 0 )) && echo 'You need to be root' && exit 1

declare -a services
services=($(systemctl -t service --full|grep \.service|grep running|sed -rn 's/^(.*\.service).*/\1/p'))

for svc in "${services[@]}"; do
	pid=$(systemctl show "$svc"|sed -nr 's/^MainPID=(.*)/\1/p')
	if readlink "/proc/$pid/exe"|grep -q '(deleted)'; then
		echo systemctl restart "$svc"
		[[ $1 == '-f' ]] && systemctl restart "$svc"
	fi
done

[[ -t 2 && $1 != '-f' ]] && echo 'Use -f to execute' >&2 || :