From 4df7440ffeef7013408f5662ce12e13b37e03195 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 16 Aug 2024 19:08:44 -0300 Subject: src/cronjob: Add simplified version --- src/cronjob | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 src/cronjob diff --git a/src/cronjob b/src/cronjob new file mode 100755 index 0000000..1adf29a --- /dev/null +++ b/src/cronjob @@ -0,0 +1,69 @@ +#!/bin/sh +set -eu + + +usage() { + cat <<-'EOF' + Usage: cronjob COMMAND... + EOF +} + + +if [ -z "${1:-}" ]; then + printf 'Missing COMMAND.\n\n' >&2 + usage >&2 + exit 2 +fi + + + +duration() { + minutes=$((${1} / 60)) + seconds=$((${1} % 60)) + printf '%sm%ss' "$minutes" "$seconds" +} + + +CMD="$*" +HOSTNAME="$(hostname)" +FROM="cronjob@$HOSTNAME" +TIMEOUT='10800' # three hours +STATUS_F="$(mkstemp)" +OUT="$(mkstemp)" + +email() { + { + cat <<-EOF + Content-Type: text/plain; charset=UTF-8 + Content-Transfer-Encoding: 8bit + From: $FROM + To: root@localhost + Subject: (exit status: $(cat "$STATUS_F")) - $HOSTNAME: $CMD + + EOF + cat "$OUT" + } | sendmail -t -f "$FROM" + rm -f "$OUT" "$STATUS_F" +} +trap email EXIT + +{ + cat <<-EOF + Running commad: $CMD + Starting at: $(timestamp -E) + + EOF + + START="$(now)" + STATUS=0 + timeout "$TIMEOUT" "$@" || STATUS=$? + printf '%s' "$STATUS" > "$STATUS_F" + END="$(now)" + DURATION_SECONDS=$((END - START)) + + cat <<-EOF + + Finished at: $(timestamp -E) + Duration: $(duration "$DURATION_SECONDS") + EOF +} 2>&1 | pre | ts '%Y-%m-%dT%H:%M:%S' | tee "$OUT" >> /var/log/cronjobs.log -- cgit v1.2.3