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