better docs, email logs from all error runs
authorIan Kelling <ian@iankelling.org>
Sun, 5 Feb 2017 04:09:32 +0000 (20:09 -0800)
committerIan Kelling <ian@iankelling.org>
Sun, 5 Feb 2017 04:09:32 +0000 (20:09 -0800)
sysd-mail-once

index ccaee0a35de46ed9b33f7fde7bb329cad8e5d1d7..a7840aad763463c93d5cb960b7c94092c00015f7 100755 (executable)
@@ -22,13 +22,17 @@ cbase=/var/local/cron-errors
 case "$1" in
     -h|--help)
         cat <<EOF
-Usage: sysd-log-once [-ERRORS] SERVICE COMMAND
+Usage: sysd-log-once [-ERRORS] SERVICE COMMAND [ARGS...]
+For systemd timers, email on repeated failure & success after failure.
 
-Use to wrap systemd timers and to email on repeated failure & success after failure
+In the service triggered by the timer, prepend this script to the ExecStart.
+The email will contain the service's logs for the last ERRORS runs.
 
-Stores error counts in $c\$error_count
 
--ERRORS:  ERRORS is the number of failurs to accumulate before mailing the error
+Stores error counts in $cbase
+
+-ERRORS:  ERRORS is the number of failurs to accumulate before mailing the error.
+          Default is 3.
 EOF
         exit 0
         ;;
@@ -47,7 +51,9 @@ arr=($glob); file="${arr[0]}"; [[ $glob != "$file" ]] || file=
 u=${USER:-root}
 [[ -d $cbase ]] || mkdir -p $cbase
 
-cursor=$(journalctl --show-cursor -qn0|sed 's/^\s*--\scursor:\s*//')
+if [[ ! $file ]]; then
+    cursor=$(journalctl --show-cursor -qn0|sed 's/^\s*--\scursor:\s*//')
+fi
 if "$@"; then
     if [[ $file ]]; then
         rm -f $file
@@ -63,12 +69,12 @@ else
             mv $file $new_file
             file=$new_file
             if [[ $file == $c$errors ]]; then
-                journalctl -u $service.service --after-cursor=$cursor | \
+                journalctl -u $service.service --after-cursor=$(<$file) | \
                     mail -s "$HOSTNAME: $service failure" $u@localhost
             fi
         fi
     else
         file=${c}1
-        touch $file
+        printf "%s\n" "$cursor" >$file
     fi
 fi