Skip to content
Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 150 lines (122 sloc) 3.36 KB
#!/bin/bash
#
# Copyright (C) 2012 Sourcepole.ch
#
# 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, 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
#
# On Debian systems, a copy of the GNU General Public License may be
# found in /usr/share/common-licenses/GPL.
function help()
{
cat<<-EOH
$0 [-h|--help] [-n] [-a]
Try to restart services, as indicated by checkrestart.
Options:
-h, --help ... help
-s, --simulate ... simulate, do nothing, just print actions
-a ... script is run by apt-get, add headers to output
Return codes:
0 ... OK
1 ... error
2 ... warning
EOH
exit 0
}
# Path to checkrestart
PATH_CHECKRESTART="/usr/sbin/checkrestart"
# Required binaries/scripts
NEED="egrep sed"
function warning()
{
echo "! Warning: $@" 1>&2
EXIT=2
}
function error()
{
echo "!! Error: $@" 1>&2
exit 1
}
function message()
{
echo "$@"
}
function xeval()
{
local cmd="$1"
local ret_func="$2"
local ret_str="Command \"$cmd\" returns"
[ -z "$ret_func" ] && ret_func="error"
message "$cmd"
[ "$DRYRUN" == "1" ] && cmd=":"
eval "$cmd" || $ret_func "$ret_str $?"
}
# starting exit code
EXIT=0
# arguments parsing
while [ "$#" != "0" ]; do
case "$1" in
-s|--simulate)
DRYRUN="1"
;;
-a)
APTGET="1"
;;
-h|--help)
help
;;
esac
shift
done
# header to apt-get output
[ "$APTGET" == "1" ] && message "--- start $0"
# check paths
[ ! -x "$PATH_CHECKRESTART" ] &&
error "Can not execute $PATH_CHECKRESTART"
# check required binaries/scripts
for bin in $NEED; do
which "$bin" >& /dev/null || \
error "Required binary/script not found $@"
done
# get output of checkrestart
output="`xeval $PATH_CHECKRESTART`"
# write output
message "$output"
# check output
[ -z "$output" ] &&
error "Output of $PATH_CHECKRESTART was empty"
# count number of processes to restart
no_procs="`echo \"$output\" | \
egrep '^Found [0-9]+ processes using old versions of upgraded files' | \
sed 's/^Found \([0-9]*\).*/\1/'`"
# restart services
echo ""
[ "$no_procs" != "0" ] && message "Trying to restart services..."
IFS="
"
no_services=0
for service in `echo "$output" | sed "/^These are the init scripts:/,//!d" | egrep "^service "`; do
xeval "$service" "warning"
no_services="$((no_services+1))"
done
# check if no of processes is equal to no of services
# if [ "$no_services" != "$no_procs" ]; then
# warning "Number of processes ($no_procs) is not equal to number of services ($no_services)"
# fi
# last messages
[ "$EXIT" == "0" ] && \
message "Completed without problems" || \
warning "Completed with some warnings see above"
# header to apt-get output
[ "$APTGET" == "1" ] && message "--- end $0"
exit $EXIT
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.