60 lines
1.4 KiB
Bash
Executable File
60 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
export DEBIAN_FRONTEND="${DEBIAN_FRONTEND:-noninteractive}"
|
|
export TZ="${TZ:-Europe/Berlin}"
|
|
|
|
if [ -f /usr/share/zoneinfo/"${TZ}" ] && [ ! -f /etc/localtime ]; then
|
|
ln -snf /usr/share/zoneinfo/"${TZ}" /etc/localtime || true
|
|
fi
|
|
|
|
required_vars=(
|
|
MASTODON_BASE_URL
|
|
MASTODON_ACCESS_TOKEN
|
|
MASTODON_VISIBILITY
|
|
SITE_URL
|
|
HASHTAGS
|
|
THROWBACK_PREFIX
|
|
MAX_RETRIES
|
|
RUN_AT
|
|
TZ
|
|
)
|
|
|
|
missing=()
|
|
for var in "${required_vars[@]}"; do
|
|
if [ -z "${!var:-}" ]; then
|
|
missing+=("${var}")
|
|
fi
|
|
done
|
|
|
|
if [ "${#missing[@]}" -gt 0 ]; then
|
|
echo "ERROR: missing required environment variable(s): ${missing[*]}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
run_at="${RUN_AT}"
|
|
if ! [[ "${run_at}" =~ ^([01][0-9]|2[0-3]):[0-5][0-9]$ ]]; then
|
|
echo "ERROR: RUN_AT='${run_at}' must be in HH:MM (24-hour) format" >&2
|
|
exit 1
|
|
fi
|
|
|
|
hour="${run_at%%:*}"
|
|
minute="${run_at##*:}"
|
|
|
|
tmp_cron="$(mktemp)"
|
|
trap 'rm -f "${tmp_cron}"' EXIT
|
|
|
|
{
|
|
echo "SHELL=/bin/bash"
|
|
echo "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
echo "TZ=${TZ}"
|
|
echo "${minute} ${hour} * * * /usr/local/bin/run-bot.sh >> /proc/1/fd/1 2>&1"
|
|
} > "${tmp_cron}"
|
|
|
|
install -m 0644 -o root -g root "${tmp_cron}" /etc/cron.d/tenbackward
|
|
|
|
/app/crontab/install-cron.sh /etc/cron.d/tenbackward
|
|
|
|
echo "tenbackward: starting cron (RUN_AT=${run_at}, TZ=${TZ})"
|
|
exec cron -f
|