From 24ba29679fdf5b858af8a8bd5f2bdc91d8ed0b52 Mon Sep 17 00:00:00 2001 From: Denis Knauf Date: Wed, 23 Oct 2024 17:07:03 +0200 Subject: [PATCH] timer-mail: use journald instead of tempfile. --- files/timer-mail | 64 +++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/files/timer-mail b/files/timer-mail index 977b4d9..85350fd 100755 --- a/files/timer-mail +++ b/files/timer-mail @@ -1,4 +1,5 @@ #!/usr/bin/env sh +# vim: set noet sw=2 ts=2 sts=2: help() { [ 0 -lt $# ] && >&2 echo "$*" @@ -10,53 +11,60 @@ Options: -t TO default: your login-user -f FROM default: your login-user -s SUBJECT default: "timer: [command *args]" - -v pipes output through -e send email only on error (command exit-code != 0) -o send email only if command writes on STDOUT or STDERR (default) -a send always email EOF - exit 1 + exit 42 } +if [ -z "$INVOCATION_ID" ] +then + >&2 echo 'No INVOCATION_ID set, not running systemd?' +fi + +subject= +on= +to= +from= + eval set -- "$(getopt -n "$0" "ht:f:s:aev" "$@")" while [ 0 -lt $# ] do - case "$1" in - -h) help ;; - -s) shift ; subject="$1" ;; - -t) shift ; to="$1" ;; - -f) shift ; from="$1" ;; - -e) on=error ;; - -o) on=output ;; - -a) on=always ;; - -v) verbose=true ;; - --) shift ; break ;; - *) help "Unknown option: $1" ;; - esac - shift + case "$1" in + -h) help ;; + -s) shift ; subject="$1" ;; + -t) shift ; to="$1" ;; + -f) shift ; from="$1" ;; + -e) on=error ;; + -o) on=output ;; + -a) on=always ;; + --) shift ; break ;; + *) help "Unknown option: $1" ;; + esac + shift done subject="${subject:-timer: $*}" on=${on:-output} -verbose=${verbose:-false} to="${to:-${LOGNAME:-$USER}}" from="${from:-${LOGNAME:-$USER}}" -output="$(mktemp)" -trap "rm -f -- $output" EXIT +"$@" +r=$? -if $verbose -then - 2>&1 "$@" | tee $output - r=$? -else - >$output 2>&1 "$@" - r=$? -fi +# should a mail be sent? +mm=false +case "$on" in +always) mm=true ;; +error) [ 0 -lt $r ] && mm=true ;; +output) journalctl -n1 _SYSTEMD_INVOCATION_ID="$INVOCATION_ID" | grep -sqm1 "\S" && mm=true ;; +esac -if [ always = $on ] || [ error = $on -a 0 -lt $r ] || [ output = $on -a -s $output ] +if $mm then - <$output mail -s "$subject" -r "$from" -- "$to" || exit 97 + journalctl _SYSTEMD_INVOCATION_ID="$INVOCATION_ID" + INVOCATION_ID="$INVOCATION_ID" + USER_INVOCATION_ID="$INVOCATION_ID" | \ + mail -s "$subject" -r "$from" -- "$to" || exit 97 fi exit $r