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
;;
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
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