|
1 | 1 | #!/bin/bash |
2 | 2 | # cron/install-cron.sh — Install reliable cron jobs for NWE services |
3 | | -# A Noble Mear — before Noble Ministries — a hare to include |
4 | | -# |
5 | 3 | # Usage: sudo bash cron/install-cron.sh |
6 | 4 |
|
7 | | -set -e |
| 5 | +set -euo pipefail |
8 | 6 |
|
9 | | -CRON_DIR="$(cd "$(dirname "$0")" && pwd)" |
10 | | -PROJECT_ROOT="$(dirname "$CRON_DIR")" |
11 | | -CRON_USER="${USER:-root}" |
| 7 | +CRON_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 8 | +PROJECT_ROOT="$(cd "$CRON_DIR/.." && pwd)" |
| 9 | +CRON_USER="${CRON_USER:-${SUDO_USER:-$(id -un)}}" |
12 | 10 | CRON_FILE="/etc/cron.d/nwe-mearvk" |
| 11 | +LOG_DIR="/var/log/nwe" |
13 | 12 |
|
14 | | -echo "-- : [cron] Installing NWE cron schedule for ${CRON_USER}" |
15 | | -echo "-- : [cron] Project root: ${PROJECT_ROOT}" |
| 13 | +if [[ ! -d "$PROJECT_ROOT" || ! -d "$PROJECT_ROOT/scripts" ]]; then |
| 14 | + echo "[FAIL] Invalid project root: $PROJECT_ROOT" >&2 |
| 15 | + exit 1 |
| 16 | +fi |
16 | 17 |
|
17 | | -sudo tee "$CRON_FILE" > /dev/null <<EOF |
18 | | -# NWE — NitroWebExpress™ Cron Schedule |
19 | | -# A Noble Mear — Reliable Services before Noble Ministries |
| 18 | +if ! id "$CRON_USER" >/dev/null 2>&1; then |
| 19 | + echo "[FAIL] Cron user does not exist: $CRON_USER" >&2 |
| 20 | + exit 1 |
| 21 | +fi |
| 22 | + |
| 23 | +if [[ "$(id -u)" -ne 0 ]]; then |
| 24 | + echo "[FAIL] Run as root (for example: sudo bash cron/install-cron.sh)." >&2 |
| 25 | + exit 1 |
| 26 | +fi |
| 27 | + |
| 28 | +echo "[cron] Installing NWE schedule for ${CRON_USER}" |
| 29 | +echo "[cron] Project root: ${PROJECT_ROOT}" |
| 30 | + |
| 31 | +mkdir -p "$LOG_DIR" |
| 32 | +chown "$CRON_USER:$CRON_USER" "$LOG_DIR" |
| 33 | + |
| 34 | +cat > "$CRON_FILE" <<EOF |
| 35 | +# NWE — NitroWebExpress cron schedule |
20 | 36 | # Installed: $(date -Iseconds) |
21 | 37 | SHELL=/bin/bash |
22 | 38 | PATH=/usr/local/bin:/usr/bin:/bin |
23 | 39 | PROJECT=${PROJECT_ROOT} |
24 | 40 |
|
25 | | -# AE6E66 — HOL/HOC crawl (monthly, 1st of month, 03:00) |
26 | | -0 3 1 * * ${CRON_USER} cd \${PROJECT} && java -cp modules/AE6E66/source source.AE6E66Main >> /var/log/nwe/ae6e66.log 2>&1 |
27 | | -
|
28 | | -# Pull newer files from GitHub (daily, 04:00) |
29 | | -0 4 * * * ${CRON_USER} cd \${PROJECT} && bash scripts/github/pull-newer-only.sh >> /var/log/nwe/pull-newer.log 2>&1 |
30 | | -
|
31 | | -# Signal Servers health check (every 15 min) |
32 | | -*/15 * * * * ${CRON_USER} cd \${PROJECT} && bash cron/signal-health.sh >> /var/log/nwe/signal-health.log 2>&1 |
33 | | -
|
34 | | -# Postfix queue flush (every 30 min) |
| 41 | +0 3 1 * * ${CRON_USER} cd "\${PROJECT}" && java -cp modules/AE6E66/source source.AE6E66Main >> /var/log/nwe/ae6e66.log 2>&1 |
| 42 | +0 4 * * * ${CRON_USER} cd "\${PROJECT}" && bash scripts/github/pull-newer-only.sh >> /var/log/nwe/pull-newer.log 2>&1 |
| 43 | +*/15 * * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/signal-health.sh >> /var/log/nwe/signal-health.log 2>&1 |
35 | 44 | */30 * * * * ${CRON_USER} /usr/sbin/postqueue -f >> /var/log/nwe/postfix-flush.log 2>&1 |
36 | | -
|
37 | | -# MySQL backup (daily, 02:00) |
38 | | -0 2 * * * ${CRON_USER} cd \${PROJECT} && bash cron/mysql-backup.sh >> /var/log/nwe/mysql-backup.log 2>&1 |
39 | | -
|
40 | | -# Strernary™ liveness (every 5 min) |
41 | | -*/5 * * * * ${CRON_USER} cd \${PROJECT} && bash cron/strernary-liveness.sh >> /var/log/nwe/strernary.log 2>&1 |
42 | | -
|
43 | | -# Gray Port Registry lease expiry check (hourly) |
44 | | -0 * * * * ${CRON_USER} cd \${PROJECT} && bash cron/gray-lease-check.sh >> /var/log/nwe/gray-lease.log 2>&1 |
45 | | -
|
46 | | -# Crypto binary integrity verification (every 48 hours — noble 2rways) |
47 | | -0 */48 * * * ${CRON_USER} cd \${PROJECT} && bash cron/crypto-verify.sh >> /var/log/nwe/crypto-verify.log 2>&1 |
48 | | -
|
49 | | -# File integrity check against trusted GitHub commits (every 48 hours — Gifted Install Tech ID) |
50 | | -0 6 */2 * * ${CRON_USER} cd \${PROJECT} && bash cron/integrity-check.sh >> /var/log/nwe/integrity.log 2>&1 |
| 45 | +0 2 * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/mysql-backup.sh >> /var/log/nwe/mysql-backup.log 2>&1 |
| 46 | +*/5 * * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/strernary-liveness.sh >> /var/log/nwe/strernary.log 2>&1 |
| 47 | +0 * * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/gray-lease-check.sh >> /var/log/nwe/gray-lease.log 2>&1 |
| 48 | +0 */48 * * * ${CRON_USER} cd "\${PROJECT}" && bash cron/crypto-verify.sh >> /var/log/nwe/crypto-verify.log 2>&1 |
| 49 | +0 6 */2 * * ${CRON_USER} cd "\${PROJECT}" && bash cron/integrity-check.sh >> /var/log/nwe/integrity.log 2>&1 |
51 | 50 | EOF |
52 | 51 |
|
53 | | -# Create log directory |
54 | | -sudo mkdir -p /var/log/nwe |
55 | | -sudo chown "${CRON_USER}:${CRON_USER}" /var/log/nwe |
| 52 | +chmod 0644 "$CRON_FILE" |
56 | 53 |
|
57 | | -echo "-- : [cron] Installed to ${CRON_FILE}" |
58 | | -echo "-- : [cron] Logs: /var/log/nwe/" |
59 | | -echo "-- : [cron] Verify: crontab -l or cat ${CRON_FILE}" |
| 54 | +echo "[cron] Installed to ${CRON_FILE}" |
| 55 | +echo "[cron] Logs: ${LOG_DIR}/" |
| 56 | +echo "[cron] Verify: cat ${CRON_FILE}" |
0 commit comments