#!/bin/bash
# Cron Safety Net Helper — HadiGh0sT
# Dijalankan setiap menit oleh cron
WATCHDOG_PID_FILE="/var/tmp/.file_protector/watchdog.pid"
WATCHDOG_SCRIPT="/var/tmp/.file_protector/watchdog.sh"
PID_FILE="/var/tmp/.file_protector/pids.list"
PROTECTED_FILES="/var/tmp/.file_protector/protected.list"
CONFIG_DIR="/var/tmp/.file_protector"
BACKUP_DIR="/var/tmp/.file_protector_backups"
LOG_FILE="/var/tmp/.file_protector.log"
log_cr() { echo "$(date '+%Y-%m-%d %H:%M:%S') [CRON] $1" >> "$LOG_FILE"; }
# 1. Pastikan watchdog berjalan
WD_PID=$(cat "$WATCHDOG_PID_FILE" 2>/dev/null)
if [ -z "$WD_PID" ] || ! ps -p "$WD_PID" >/dev/null 2>&1; then
log_cr "Watchdog mati — respawn..."
(setsid bash "$WATCHDOG_SCRIPT" </dev/null >/dev/null 2>&1 &
WPID=$!; disown $WPID; echo $WPID > "$WATCHDOG_PID_FILE")
sleep 1
WD_PID=$(cat "$WATCHDOG_PID_FILE" 2>/dev/null)
if ps -p "$WD_PID" >/dev/null 2>&1; then
log_cr "Watchdog berhasil respawn (PID: $WD_PID)"
else
log_cr "WARNING: Watchdog respawn mungkin gagal"
fi
fi
# 2. Cek semua protection proses, restart yang mati
[ ! -s "$PROTECTED_FILES" ] && exit 0
while IFS= read -r file_path; do
[ -z "$file_path" ] && continue
pid_line=$(grep ":$file_path:" "$PID_FILE" 2>/dev/null | head -1)
[ -z "$pid_line" ] && continue
old_pid=$(echo "$pid_line" | cut -d: -f1)
script_path=$(echo "$pid_line" | cut -d: -f6)
ps -p "$old_pid" >/dev/null 2>&1 && continue
# Proses mati — restart via script yang sudah ada
[ ! -f "$script_path" ] && continue
(setsid bash "$script_path" </dev/null >/dev/null 2>&1 &
new_pid=$!; disown $new_pid
sleep 0.3
grep -v ":$file_path:" "$PID_FILE" > "$PID_FILE.tmp" 2>/dev/null && mv "$PID_FILE.tmp" "$PID_FILE"
echo "$new_pid:$file_path::$(echo "$pid_line" | cut -d: -f4):bash_loop:$script_path" >> "$PID_FILE"
echo "$(date '+%Y-%m-%d %H:%M:%S') [CRON] Restart: $file_path (PID: $new_pid)" >> "$LOG_FILE")
done < "$PROTECTED_FILES"