From: Don Armstrong Date: Tue, 25 Apr 2017 23:02:05 +0000 (-0700) Subject: only run getmail if the ssh master is up X-Git-Url: https://git.donarmstrong.com/?p=bin.git;a=commitdiff_plain;h=789f31d2b70d4fdd868403f23423ff825e6cef26 only run getmail if the ssh master is up --- diff --git a/getmail b/getmail index d8cf119..e7a4ee2 100755 --- a/getmail +++ b/getmail @@ -1,7 +1,7 @@ #!/bin/sh # Configure the two things below for your MUA and the host being run. -IMAPHOST=linnode.donarmstrong.com +IMAPHOST=$( awk -F= '/remotehost/{print $2}' ~/.offlineimaprc | head -n 1 ) MUA=mutt #set -x @@ -21,42 +21,41 @@ if which ionice >/dev/null 2>&1; then IONICE="ionice -c 3" fi; -# if we're not running under cron or there is a mailserver running -if [ -z "$CRON" ] || kill -0 `pgrep -U $(id -u) -x $MUA` 2>/dev/null; then - # and we can ping the imap host - if ping -q -c 3 $IMAPHOST >/dev/null 2>&1; then - # source the ssh info if it exists - if [ -e ~/.ssh/"ssh_agent_info_$HOSTNAME" ]; then - . ~/.ssh/"ssh_agent_info_$HOSTNAME" > /dev/null; - fi; - PID="$(pgrep -U $(id -u) offlineimap)"; - if [ -n "$PID" ]; then - # if offlineimap has been running for more than 20 minutes - if [ $(( $(date +'%s') - $(stat -c '%Y' /proc/$PID/cmdline) )) -gt 1200 ]; then +# if we are running under cron +if [ -n "$CRON" ]; then + # and there is no MUA open, exit + if ! kill -0 `pgrep -U $(id -u) -x $MUA` 2>/dev/null; then + exit 0; + fi; + # if there is not a working ssh master, exit. + if ! ssh -O check $IMAPHOST 2>&1|grep -q running; then + exit 0; + fi; +fi; + +# source the ssh info if it exists +if [ -e ~/.ssh/"ssh_agent_info_$HOSTNAME" ]; then + . ~/.ssh/"ssh_agent_info_$HOSTNAME" > /dev/null; +fi; +env; + +PID="$(pgrep -U $(id -u) offlineimap)"; +if [ -n "$PID" ]; then + # if offlineimap has been running for more than 20 minutes + if [ $(( $(date +'%s') - $(stat -c '%Y' /proc/$PID/cmdline) )) -gt 1200 ]; then kill "$PID" >/dev/null 2>&1 || true; sleep 5 kill -0 "$PID" >/dev/null 2>&1 && kill -9 "$PID" >/dev/null 2>&1; PID="$(pgrep -U $(id -u) offlineimap)"; - fi; - fi; - if [ -z "$PID" ]; then - if nice -n 19 ${IONICE} offlineimap -o -u Noninteractive.Basic 2>&1 |grep validity| \ - perl -ne 'my ($account,$list) = /UID validity problem for folder ([\w-]+)\.([\w-]+)/; - next unless defined $account and length $account; - qx(/home/don/bin/deletemailbox -a $account $list > /dev/null);'; then - # Clean the lists up too - for account in bugs lists; do - find /home/don/Mail/$account -maxdepth 1 -mindepth 1 -type d \ - -exec sh -c 'test $(find "{}" -type f |wc -l) -eq 0' ';' \ - -printf '%f\000'|xargs -0 -rn 1 ~/bin/deletemailbox -a $account >/dev/null 2>&1; - find /home/don/Mail/$account -maxdepth 2 -mindepth 2 -iname 'new' \ - -type d -ctime +60 -printf '%h\n'|xargs -rn 1 basename|xargs \ - -rn 1 /home/don/bin/deletemailbox -a $account >/dev/null 2>&1; - done; - fi; - if which notmuch >/dev/null 2>&1; then - nice -n 19 ${IONICE} notmuch new >/dev/null 2>&1; - fi; fi; +fi; + +if [ -z "$PID" ]; then + nice -n 19 ${IONICE} offlineimap -o -u basic 2>&1 |grep validity| \ + perl -ne 'my ($account,$list) = /UID validity problem for folder ([\w-]+)\.([\w-]+)/; + next unless defined $account and length $account; + qx(/home/don/bin/deletemailbox -a Inbox $account.$list > /dev/null);'; + if which notmuch >/dev/null 2>&1; then + nice -n 19 ${IONICE} notmuch new >/dev/null 2>&1; fi; fi;