#!/bin/sh # # Auto-poweroff # timeup=3600 overtime=1800 lastlog=/var/local/ltime zzzflg=/var/local/zzz # btime=`sed -e 's/btime *//p;d' /proc/stat` uptime=$(expr "$(cat /proc/uptime)" : '\([0-9]*\)') ctime=$(expr ${btime} + ${uptime}) users=$(loginctl list-users --no-legend | wc -l) pty=`cat /proc/sys/kernel/pty/nr` tcp=`awk 'BEGIN {c = 0} {if ($4 == "01") c++} END {print c}' /proc/net/tcp` cpu=`fgrep -c 'processor' /proc/cpuinfo` loadavg=$(expr "$(cat /proc/loadavg)" : '\([0-9]*\)') load=$(expr ${loadavg} / ${cpu}) zzz=$(test -f ${zzzflg} && echo 1 || echo 0) # if [ ${uptime} -le ${timeup} ] then echo "Uptime is within the time limit.(${timeup}sec)" 1>&2 if [ -f ${lastlog} ] then if [ -f ${zzzflg} ] then test ${zzzflg} -ot ${lastlog} && rm ${zzzflg} fi rm ${lastlog} fi exit 0 elif [ ${users} -eq 0 -a ${pty} -eq 0 -a ${tcp} -eq 0 -a ${load} -eq 0 -a ${zzz} -eq 1 ] then ltime=$(<${lastlog}) ltime=$(expr ${ltime} + ${overtime}) test ${ctime} -le ${ltime} && exit 2 echo "Power-off uptime=${uptime}/${timeup}s" | tee /dev/stderr | logger -t "auto-poweroff" test -f ${lastlog} && rm ${lastlog} test -f ${zzz} && rm ${zzz} /sbin/poweroff else echo "Defer uptime=${uptime}/${timeup}s users=${users} pty=${pty} tcp=${tcp} loadavg=${loadavg}/${cpu} zzz=${zzz}" | tee /dev/stderr | logger -t "auto-poweroff" echo ${ctime} > ${lastlog} exit 2 fi ### END ###