Hallo zusammen,
ich arbeite erst seit Kurzem mit Ubunutu Mate 20.04 und das sind meine ersten Linux-Erfahrungen. Ich habe in meinem Home-Verzeichnis einen Ordner ~/Entwicklung. In diesem Ordner liegt ein Git-Repository. Nun wollte ich eine automatische Routine schreiben, die beim Herunterfahren des PCs ausgeführt wird und automatisch überprüft, ob geänderte Dateien vorliegen und wenn ja, ein automatischer Commit erstellt wird. Grundsätzlich habe ich ein Skript "auto_commit", das im terminal ausgeführt werden kann und auch funktioniert. Bei der Internetrecherche, wie dies mit dem Herunterfahren verknüpft werden kann, habe ich viele Artikel gefunden, in denen immer wieder auf gleiche Weise beschrieben wird, dass soetwas vermeintlich einfach über das runlevel rc5 bzw. rc0 gelöst werden kann. Ich habe nun folgende Vorgehensweise aufbauend auf die Artikel versucht:
1. Im Pfad /etc/init.d liegt die Datei auto_commit mit folgendem Code:
#!/bin/sh ### BEGIN INIT INFO # Provides: auto_commit # Required-Start: # Required-Stop: # X-Start-Before: # X-Stop-After: # Default-Start: 2 3 4 5 # Default-Stop: 0 6 # Short-Description: commits tgdf # Description: gfdggfd ### END INIT INFO echo laueft $(date) >> /boot.log # Dient als Test, um zu prüfen, ob Skript ueberhaupt ausgefuehrt wird # ab hier wurde alles auskommentiert, da selbst der obere Befehl echo (teilweise) nicht aufgerufen wird #var=$(date) #cd ~/Entwicklung #git update-index --refresh #echo "-----------------------------------------------------" #git status #if [[ `git status --porcelain` ]]; then #echo "-----------------------------------------------------" # echo "Changes found" # git add * # git add -A # echo "Changes staged" # git commit -m "Automatic Commit at $var" # echo "Commit completed successfull" # echo "-----------------------------------------------------" # git status # echo "-----------------------------------------------------" #else #echo "-----------------------------------------------------" # echo "No changes" # echo "-----------------------------------------------------" #fi exit 0
2. Die Datei wurde über den Befehl
sudo chmod -x /etc/init.d/auto_commit
ausführbar gemacht und kann über den Terminal auch gestartet werden. Folgendes liefert die terminaleingabe:
user@user-GE70-2QD:~$ ls -l /etc/init.d/auto_commit -rwxr-xr-x 1 root root 1137 Dez 21 10:42 /etc/init.d/auto_commit
3. Ich habe sowohl in /etc/rc0.d/ als auch in /etc/rc6.d/ jeweils über den Befehl
sudo ln -s /etc/init.d/auto_commit /etc/rcX.d/K01auto_commit
einen symbolischen Link eingefügt.
Wenn ich das so mache, wird das Skript beim Terminal-Befehl
shutdown -r 0
überhaupt nicht ausgeführt, daran erkennbar, dass in der boot.log nichts eingetragen wird.
Ich habe nun probiert die symbolischen Links in rc0.d und rc6.d nicht als K01auto_commit, sondern als S01auto_comit abzulegen, in der Hoffnung, dass diese dann gestartet werden. Das hat jedoch auch nicht funktioniert.
Wenn ich jedoch in rc5.d den Link S01auto_commit einfüge, wird in das boot.log zweimal untereinander "laueft DATUM+Uhrzeit" geschrieben mit jeweils leicht abweichender Zeit, was darauf hindeutet, dass das Skript grundsätzlich wohl funktioniert. Wieso es zweimal aufgerufen wird, ist mir jedoch nicht klar. Hierbei ist es übrigens unerheblich, ob in rc0.d und in rc6.d noch die Links vorhanden sind, oder nicht, es wird immer zweimal ausgeführt. Wenn ich die run-level richtig verstanden habe, liegen in rc5.d Links zu Init-Dateien, die beim Start ausgeführt werden, das war aber eben nicht mein Ziel.
Mir ist bewusst, dass ich das Problem einfach umgehen könnte, indem ich ein allgemeines Auto_commit-Skript mit abschließendem shutdown-Befehl schreibe. Jedoch geht es hier genau darum, dass egal wie der Rechner heruntergefahren wird, immer ein Commit stattfinden soll und man es gar nicht vergessen kann. Am meisten ärgert mich gerade, dass es unzählige Forenbeiträge zu dem Thema gibt und immer vermittelt wird, dass das simpel sein sollte. Doch egal was ich probiert habe, nichts hat mein Problem behoben. Hat jemand hierfür einen Tipp? Das Skript oben ist genau das original-File, also wenn jemand hier Fehler findet, gerne mitteilen.
Ich danke schon mal für Hilfe und freue mich auf Lösungsansätze. Schöne Grüße