testsAndMisc/linux_configuration/scripts/system-maintenance/bin/auto-system-update.sh

52 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# Automatic system update script for Arch Linux
# Runs pacman -Syuu and yay -Sua non-interactively
# This file is installed by setup_periodic_system.sh
set -euo pipefail
readonly LOG_FILE="/var/log/auto-system-update.log"
readonly LOCK_FILE="/var/lock/auto-system-update.lock"
readonly ACTUAL_USER="__ACTUAL_USER__"
log_msg() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE" >&2
}
cleanup() {
rm -f "$LOCK_FILE"
}
trap cleanup EXIT
# Prevent concurrent runs
if ! (set -o noclobber && echo $$ > "$LOCK_FILE") 2>/dev/null; then
log_msg "Another update is already running (lock: $LOCK_FILE). Exiting."
exit 0
fi
log_msg "=== Automatic System Update Started ==="
# --- Official repository update (pacman) ---
log_msg "Running pacman -Syuu --noconfirm ..."
if /usr/bin/pacman -Syuu --noconfirm >> "$LOG_FILE" 2>&1; then
log_msg "pacman update completed successfully"
else
log_msg "pacman update failed (exit $?)"
fi
# --- AUR update (yay) ---
# yay must not run as root; run as the actual user
if command -v /usr/bin/yay > /dev/null 2>&1; then
log_msg "Running yay -Sua --noconfirm as $ACTUAL_USER ..."
if sudo -u "$ACTUAL_USER" /usr/bin/yay -Sua --noconfirm 2>&1 | tee -a "$LOG_FILE" > /dev/null; then
log_msg "yay AUR update completed successfully"
else
log_msg "yay AUR update failed (exit $?)"
fi
else
log_msg "yay not found, skipping AUR updates"
fi
log_msg "=== Automatic System Update Completed ==="