Dein Skript sieht im Großen und Ganzen gut aus, aber ich habe ein paar Anmerkungen und Verbesserungsvorschläge:
Log-Datei: Du benutzt die Log-Datei nur für die Überprüfung, wann das Skript das letzte Mal gestartet wurde. Du könntest es jedoch auch für die Ausgabe von Nachrichten und Fehlern verwenden. Zum Beispiel könntest du den Output von flatpak update oder flatpak repair ins Log schreiben, um es später einfacher nachvollziehen zu können.
# Führe das Skript mit CPU-Limitierung aus und schreibe den Output ins Log
nice -n 10 cpulimit -l $CPU_LIMIT $SKRIPT_PFAD >> "$LOG_PFAD" 2>&1 &
Abhängigkeiten installieren: Du könntest sicherstellen, dass alle benötigten Abhängigkeiten vorhanden sind, indem du sie zu Beginn des Skripts installierst.
Überprüfung auf defekte Runtimes: Die Überprüfung auf defekte Runtimes könnte in den Bereich verschoben werden, wo du auch nach unbenutzten Runtimes suchst. Das macht den Code kohärenter.
Aufräumen: Du kannst den Logfile-Pfad und den Skript-Pfad am Anfang des Skripts als Konstanten definieren, um die Wartbarkeit zu verbessern.
Hier ist eine überarbeitete Version mit den genannten Änderungen:
#!/bin/bash
# Pfade
SKRIPT_PFAD="/bin/update_script.sh"
LOG_PFAD="/var/log/update_script.log"
# Abhängigkeiten installieren
sudo apt-get update
sudo apt-get install -y cpulimit flatpak
# Setzen Sie die gewünschte CPU-Limitierung, hier 5 Prozent (5000 Millisekunden)
CPU_LIMIT=5000
# Überprüfen, ob das Skript in den letzten zwei Tagen gestartet wurde
letzt_start=$(stat -c %Y "$LOG_PFAD")
jetzt=$(date +%s)
vergangene_zeit=$((jetzt - letzt_start))
zwei_tage=$((2 * 24 * 60 * 60)) # 2 Tage in Sekunden
if [ "$vergangene_zeit" -ge "$zwei_tage" ]; then
# Aktualisiere das letzte Startdatum
touch "$LOG_PFAD"
# Führe das Skript mit CPU-Limitierung aus und schreibe den Output ins Log
nice -n 10 cpulimit -l $CPU_LIMIT $SKRIPT_PFAD >> "$LOG_PFAD" 2>&1 &
fi
# Update Flatpak mit CPU-Limitierung
nice -n 10 cpulimit -l $CPU_LIMIT flatpak update -y >> "$LOG_PFAD" 2>&1 &
# Update Runtimes mit CPU-Limitierung
nice -n 10 cpulimit -l $CPU_LIMIT flatpak update --appstream -y >> "$LOG_PFAD" 2>&1 &
nice -n 10 cpulimit -l $CPU_LIMIT flatpak update --runtime -y >> "$LOG_PFAD" 2>&1 &
# Deinstalliere unbenutzte Runtimes mit CPU-Limitierung
nice -n 10 cpulimit -l $CPU_LIMIT flatpak list --columns=application | cut -d '/' -f 1 | sort -u > installed_runtimes.txt &
nice -n 10 cpulimit -l $CPU_LIMIT flatpak list --columns=runtime | cut -d '/' -f 1 | sort -u > used_runtimes.txt &
# Suche nach unbenutzten Runtimes
unused_runtimes=$(comm -23 installed_runtimes.txt used_runtimes.txt)
# Deinstalliere unbenutzte Runtimes mit CPU-Limitierung
if [ -n "$unused_runtimes" ]; then
echo "Deinstalliere unbenutzte Runtimes: $unused_runtimes" >> "$LOG_PFAD" 2>&1
for runtime in $unused_runtimes; do
nice -n 10 cpulimit -l $CPU_LIMIT flatpak uninstall -y $runtime >> "$LOG_PFAD" 2>&1 &
done
fi
# Suche nach defekten Runtimes
defective_runtimes=$(flatpak list --columns=application,reason | grep -i "Broken runtime" | cut -d ' ' -f 1)
# Deinstalliere defekte Runtimes mit CPU-Limitierung
if [ -n "$defective_runtimes" ]; then
echo "Deinstalliere defekte Runtimes: $defective_runtimes" >> "$LOG_PFAD" 2>&1
for runtime in $defective_runtimes; do
nice -n 10 cpulimit -l $CPU_LIMIT flatpak uninstall -y $runtime >> "$LOG_PFAD" 2>&1 &
done
fi
# Aufräumen
rm installed_runtimes.txt used_runtimes.txt
Alles anzeigen
Diese Änderungen sollen die Lesbarkeit und Wartbarkeit des Skripts verbessern. Beachte, dass einige Anpassungen möglicherweise erforderlich sind, abhängig von den genauen Anforderungen und der Systemkonfiguration.
Wenn du es komplett automatisieren willst kannst du ggf. bei sudo das Passwort vorgeben
read -p "Bitte geben Sie ihr Passwort ein: " passwort
echo "$passwort" | sudo -kS apt install -y $programm
# -S, --stdin, The -S flag makes sudo read the password from the standard input.
# Note that this will produce an error if your sudo access token is active,
# if you don't need to enter your password because you've already done so recently.
# To get around that, you could use -k to reset the access token: example: echo 'password' | sudo -kS ls