slitaz-dev-tools view mirror-tools/rootfs/usr/sbin/srvwatch @ rev 309

Remove ashism ==
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Feb 26 08:23:49 2019 +0100 (2019-02-26)
parents cdce40802814
children
line source
1 #!/bin/sh
3 # Check daemon with pidfile: usage check_pidfile $PIDFILE $DAEMON
4 active_pidfile()
5 {
6 if [ ! -e $1 ]; then
7 return 1
8 elif grep -qs "Name:.$(basename $2)$" \
9 /proc/$(cat $1 | sed 's/[^0-9]//g')/status ; then
10 return 0
11 else
12 rm -f $1
13 return 2
14 fi
15 }
17 log()
18 {
19 cat > /var/log/svrwatch.log.$$ <<EOT
20 $(tail -n 50 /var/log/svrwatch.log 2> /dev/null)
21 $(date) $@
22 EOT
23 mv -f /var/log/svrwatch.log.$$ /var/log/svrwatch.log
24 }
26 cron_leak()
27 {
28 mem=$(top -b -n1 | grep cron | grep -v grep | awk '{ print $5 }')
29 case "$mem" in
30 *m) [ ${mem%m} -gt 500 ] && {
31 log "restart crond (use $mem)"
32 /etc/init.d/crond restart > /dev/null 2>&1
33 }
34 ;;
35 esac
36 }
38 make_pem()
39 {
40 names="DNS:*.$1, DNS:$1"
41 if grep -q '# req_extensions' /etc/ssl/openssl.cnf; then
42 sed -i 's/^# req_extensions.*/req_extensions = multiname/' \
43 /etc/ssl/openssl.cnf
44 cat >> /etc/ssl/openssl.cnf << EOT
46 [ multiname ]
47 subjectAltName = $names
48 EOT
49 else
50 sed -i "s/^subjectAltName.*/subjectAltName = $names/" /etc/ssl/openssl.cnf
51 fi
52 false && cat > multiname.ext <<EOT
53 [ multiname ]
54 subjectAltName = $names
55 EOT
57 # -extfile multiname.ext -extensions multiname
58 openssl req -new -x509 -keyout $2 -extensions multiname \
59 -out $2 -days 3650 -nodes <<EOT
60 $(. /etc/locale.conf ; echo ${LANG#*_})
61 $(cat /etc/TZ)
63 *.$1
67 EOT
68 }
70 check_pem()
71 {
72 grep SSLCertificat /etc/apache/conf.d/* | awk '{ print $3 }' | uniq | \
73 while read file; do
74 [ -s $file ] && continue
75 make_pem $(basename $file .pem) $file
76 done
77 }
79 check_certificates()
80 {
81 if [ -n "$(check_pem)" ]; then
82 /etc/init.d/apache stop
83 /etc/init.d/apache start
84 fi
85 }
87 daemon_crash()
88 {
89 if [ -f /etc/aliases -a /etc/aliases -nt /etc/aliases.db ]; then
90 log "/etc/aliases"
91 postalias /etc/aliases
92 fi
93 eval $(grep ^RUN_DAEMONS= /etc/rcS.conf)
94 checked=""
95 while read command pidfile daemon; do
96 case "$command" in
97 \#*) continue
98 esac
99 checked="$checked $command"
100 case " $RUN_DAEMONS " in
101 *\ $command\ *)
102 case "$command" in
103 apache)
104 check_certificates ;;
105 esac
106 active_pidfile $pidfile $daemon || {
107 log "start daemon $command"
108 /etc/init.d/$command start
109 }
110 if [ $command = mysql -a ! -e /var/run/mysqld/mysqld.sock ]; then
111 log "mysql socket"
112 killall mysqld
113 killall -9 mysqld
114 /etc/init.d/mysql start
115 fi
116 ;;
117 esac
118 done <<EOT
119 rsyncd /var/run/rsyncd.pid rsync
120 openssh /var/run/sshd.pid sshd
121 lighttpd /var/run/lighttpd.pid lighttpd
122 hald /var/run/hald/pid hald
123 ajaxterm /var/run/ajaxterm.pid python
124 apache /var/run/apache/httpd.pid httpd
125 crond /var/run/crond.pid crond
126 dbus /var/run/dbus/pid dbus-daemon
127 dropbear /var/run/dropbear.pid dropbear
128 hald /var/run/hald/pid hald
129 mysql /var/run/mysqld/mysql.pid mysqld
130 ntp /var/run/ntpd.pid ntpd
131 postfix /var/spool/postfix/pid/master.pid master
132 pure-ftpd /var/run/pure-ftpd.pid pure-ftpd
133 slim /var/lock/slim.lock slim
134 knock /var/run/knockd.pid knockd
135 udhcpd /var/run/udhcpd.pid udhcpd
136 dhcpd /var/run/dhcpd.pid dhcpd
137 EOT
138 rm -f /var/log/srvwatch.log
139 for i in $RUN_DAEMONS ; do
140 case " $checked " in
141 *\ $i\ *) ;;
142 *) echo "Not checked: $i" >> /var/log/srvwatch.log ;;
143 esac
144 done
145 }
147 swap_full()
148 {
149 if [ -n "$(free | awk '/Swap/ { if ($2/$4 > 10) print }')" ]; then
150 log "$(free | grep Swap)"
151 top -b -n1 > /var/log/top.log
152 sync
153 reboot
154 fi
155 }
157 case "$1" in
158 install)
159 [ $0 = $2/usr/sbin/srvwatch ] || mv $0 $2/usr/sbin/srvwatch
160 if [ -x $2/usr/sbin/srvwatch ] && ! grep -q /usr/sbin/srvwatch $2/etc/inittab; then
161 sed -i 's|^::sysinit.*|&\n::respawn:/usr/sbin/srvwatch loop|' \
162 $2/etc/inittab
163 [ -n "$2" ] || kill -1 1
164 fi
165 ;;
166 once)
167 daemon_crash
168 cron_leak
169 swap_full ;;
170 loop)
171 while true; do
172 daemon_crash
173 cron_leak
174 swap_full
175 sleep 15m
176 done > /dev/null 2>&1 ;;
177 *)
178 echo "Usage: $0 install" ;;
179 esac