forked from tpo/debian-goodies
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrestart-services
executable file
·149 lines (122 loc) · 3.36 KB
/
restart-services
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/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