## vim:ft=zsh ## Small shutdown/reboot wrapper to work together with my other tools ## Usage: off [-nrh] [place] ## Copyright (C) 2008, 2009 by Daniel Friesel ## License: WTFPL typeset filesystem garbage file typeset -a filesystems typeset tune2fs typeset -i force leave reboot simulate exit_ok=1 function execute { if (( simulate )) { echo ${*} } else { ${*} || exit_ok=0 } } while [[ ${1} == -* ]] { case ${1} in -l) leave=1 ;; -n) simulate=1 ;; -r) reboot=1 ;; --force) force=1 ;; -h) print 'off - shutdown / restart the system' print 'Usage: off [--force] [-hnr]' print 'Options:\n' print ' -n simulate. Do not actually shutdown' print ' -r reboot' print ' -h show this message' print '\--force shutdown even if the machine is a server' return 0 ;; -|--) shift; break ;; *) echo "Unrecognized option: ${1}" >&2 ; return 1 ;; esac shift } # Don't shut down a server too easily if [[ ${force} != 1 && ${hosts[$HOST]} == *:server:* ]] { print -P '%B%F{yellow}This seems to be a server... not shutting down%f%b' echo "Use 'off --force' if you really mean it" return 1 } if pgrep -x amarokapp &> /dev/null; then execute dcop amarok MainApplication-Interface quit fi execute uinit stop -a while read filesystem garbage; do if [[ ${garbage} == *[12] ]] && fgrep -q ${filesystem} /etc/mtab; then filesystems+=${filesystem} fi done < /etc/fstab if (( leave )) { execute unisync with-all execute mra push execute ct push } for filesystem in ${filesystems}; { tune2fs=($(sudo tune2fs -l ${filesystem} | fgrep -i 'mount count' | grep -o '[0-9]*')) if (( tune2fs[2] - tune2fs[1] < 5 )) { exit_ok=0 echo "notice: filesystem ${filesystem} due to check in $((tune2fs[2] - tune2fs[1])) mounts" } } if (( reboot )) { execute sudo reboot } else { execute sudo halt } if (( exit_ok )) { execute exit }