Files
microdao-daarion/scripts/docs/install_local_cron.sh

87 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
SCHEDULE="${DOCS_CRON_SCHEDULE:-17 9 * * *}"
DRY_RUN=0
UNINSTALL=0
MARK_START="# >>> microdao docs maintenance >>>"
MARK_END="# <<< microdao docs maintenance <<<"
usage() {
cat <<'USAGE'
Usage:
bash scripts/docs/install_local_cron.sh [--schedule "17 9 * * *"] [--dry-run] [--uninstall]
Default schedule:
17 9 * * * (local timezone)
Installs a single managed cron block that runs:
bash scripts/docs/run_docs_maintenance.sh
No git push is performed by maintenance script.
USAGE
}
while [[ $# -gt 0 ]]; do
case "$1" in
--schedule)
SCHEDULE="$2"
shift 2
;;
--dry-run)
DRY_RUN=1
shift
;;
--uninstall)
UNINSTALL=1
shift
;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown arg: $1" >&2
usage
exit 2
;;
esac
done
if ! command -v crontab >/dev/null 2>&1; then
echo "crontab command not found" >&2
exit 3
fi
current="$(crontab -l 2>/dev/null || true)"
cleaned="$(printf '%s\n' "$current" | awk -v s="$MARK_START" -v e="$MARK_END" '
BEGIN{skip=0}
index($0,s)>0 {skip=1; next}
index($0,e)>0 {skip=0; next}
skip==0 {print}
')"
if [[ "$UNINSTALL" -eq 1 ]]; then
new_cron="$cleaned"
else
cmd="cd $ROOT_DIR && mkdir -p docs/consolidation/logs && bash scripts/docs/run_docs_maintenance.sh >> docs/consolidation/logs/cron_runner.log 2>&1"
block="$MARK_START\n$SCHEDULE $cmd\n$MARK_END"
if [[ -n "$cleaned" ]]; then
new_cron="$cleaned\n$block"
else
new_cron="$block"
fi
fi
if [[ "$DRY_RUN" -eq 1 ]]; then
echo "[dry-run] resulting crontab:"
printf '%b\n' "$new_cron"
exit 0
fi
printf '%b\n' "$new_cron" | crontab -
echo "crontab updated"
crontab -l