ubuntuusers.de

Bash-Script in Verzeichnis init.d wird nicht richtig ausgeführt

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 20.04 (Focal Fossa)
Antworten |

testobject

Anmeldungsdatum:
21. Dezember 2020

Beiträge: Zähle...

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

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

Herzlich willkommen hier im Forum!

Zwei Anmerkungen:

  1. Mit Deiner Version würde man das eher mit einem Systemd-Dienst erledigen. Irgendwann wird /etc/rc* vermutlich nicht mehr unterstützt, und spätestens dann musst Du das sowieso umstellen.

  2. Um die Mechanik der Ausführung richtig hinzubekommen und auszutesten würde ich erst mal mit einem ganz simplen Skript anfangen, z.B. so etwas:

1
2
3
4
5
#!/bin/sh

msg="PID: $$ date: $(date)"
echo "echo: $msg"
logger "log: $msg"

Da kann wenig schiefgehen und wenn Du die Ausgaben im Journal findest, weist Du, dass es geklappt hat. Dann kannst Du Dich um den Rest kümmern.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11243

Wohnort: München

rklm schrieb:

  1. Mit Deiner Version würde man das eher mit einem Systemd-Dienst erledigen. Irgendwann wird /etc/rc* vermutlich nicht mehr unterstützt, und spätestens dann musst Du das sowieso umstellen.

Und bis es soweit ist, muss man unbedingt https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities/ beachten - kurz: es werden nur noch die Funktionen start, stop und status im Skript vom Compatiblity Layer berücksichtig. Das Sourcen des Skripts sollte keine Aktionen ausführen.

In Init-Skripten sind diverse Umgebungsvariablen nicht gesetzt, d.h. sowas wie cd ~/Entwicklung ist da IMHO unsinning, da das im besten Fall zu /root/Entwicklung aufgelöst wird - ich würde da einen absoluten Pfad nehmen, der nicht mehr von der Shell expandiert werden muss. Git kennt außerdem (wie make auch) den Schalter -C Arbeitsverzeichnis, mit dem man ein Verzeichnis nutzen kann, ohne da hinein zu wechseln - das macht die Fehlerbehandlung (gerade wenn man mehr als ein Verzeichnis abgrasen will) wesentlich leichter.

testobject

(Themenstarter)

Anmeldungsdatum:
21. Dezember 2020

Beiträge: 5

Hallo, danke für eure ersten Rückmeldungen.

Ich habe nun das einfache Skript von rklm im init.d-Ordner angelegt, ausführbar gemacht und wieder eine Verlinkung in rc6.d angelegt. Hier erscheint wieder das gleiche Problem, nämlich,dass nichts passiert, egal ob der Link als S01testscript oder als K01testscript angelegt wird. Lege ich hingegen einen Link als S01testscript in rc5.d, funktioniert es wieder. Danke auch für den Hinweis mit Systemd. Ich werde mich hier einlesen und schauen, ob ich eine andere Lösung finde, die funktioniert.

An seahawk1986: danke für deinen Link, ich werde mich als nächstes dort einlesen und schauen, ob ich da potentielle Fehlerquellen finde. Und auch danke für die Verlinkungshinweise. Gerade für Anfänger sind solche Tipps Gold wert ☺

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17599

Wohnort: Berlin

rklm schrieb:

1
2
3
4
5
#!/bin/sh

msg="PID: $$ date: $(date)"
echo "echo: $msg"
logger "log: $msg"

Da kann wenig schiefgehen und wenn Du die Ausgaben im Journal findest, weist Du, dass es geklappt hat. Dann kannst Du Dich um den Rest kümmern.

Ich darf ergänzen:

1
2
3
4
5
#!/bin/sh

msg="PID: $$ date: $(date) runlevel: $(runlevel) Mein Shutdownscript"
echo "echo: $msg"
logger "log: $msg"

Zumindestens, solange Du es nicht mit systemd versuchst, könnte der Runlevel helfen.

Und "Mein Shutdownscript" könnte hilfreich sein, um es in den Logdateien zu suchen. Letzteres würde ich auch empfehlen, wg. der Zukunftssicherheit. Ich weiß gar nicht, in welchen logfiles das landen müsste - ich würde alle durchgreppen, und da ist ein eindeutiger Name, nicht unbedingt dieser, hilfreich.

Bist Du sicher, dass es schnell genug abgearbeitet wird (wenn es aus mehr als Logmessages besteht), bzw. dass das System wartet, bis es fertig ist?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11243

Wohnort: München

Runlevel 2-4 sind so, als würde man sowas in eine Systemd-Unit schreiben:

[Install]
WantedBy=multi-user.target

Da es weder start noch stop Funktionen im Skript gibt, führt Systemd da nach dem initialen Einlesen zum Generieren der SysV-Init Kompatibilitäts-Units auch nichts aus.

Ich würde das mit SysV-Init einfach sein lassen und eine Systemd-Unit /etc/systemd/system/autocommit.service schreiben, die ein Skript aufruft, das die Arbeit erledigt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=autocommit changes in workdir(s)

[Service]
Type=oneshot
RemainAfterExit=true
User=user
Group=user
ExecStart=/bin/true
ExecStop=/usr/local/bin/autocommit-changes /home/user/Entwicklung
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

Und eine ausführbar gemachte /usr/local/bin/autocommit-changes könnte dann z.B. so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
for workdir
do
   GITCMD=('git' '-C' "$workdir")

   "${GITCMD[@]}" update-index --refresh
   "${GITCMD[@]}" status

   if "${GITCMD[@]}" status --porcelain | grep -q .
   then
     echo "Changes found"
     "${GITCMD[@]}" add -A
     echo "Changes staged"
     "${GITCMD[@]}" commit -m "Automatic Commit at $(date)"
     echo "Commit completed successfull"  
     "${GITCMD[@]}" status
   else
     echo "No changes"
   fi
done

Die Unit kann man dann mittels systemctl start autocommit.service starten lassen und den Stop-Fall (der ansonsten vor dem Shutdown eintritt) mittels systemctl stop autocommit.service auslösen, mittels systemctl enable autocommit.service dafür sorgen, dass die Unit beim Start automatisch gestartet wird und sich mittels journalctl -u autocommit.service -l anzeigen lassen, was sie so ins Log geschrieben hat.

Alternativ zur Unit könnte man das Skript auch von den Shutdown- bzw. Standby-Hooks ausführen lassen, die Systemd in /lib/systemd/systemd-shutdown bzw. /lib/systemd/systemd-sleep akzeptiert (vgl. https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html und https://www.freedesktop.org/software/systemd/man/systemd-suspend.service.html, aber damit verliert man die Konfigurationsmöglichkeiten, die man mit einer eigenen Systemd-Unit hat (z.B. das gezielte Setzen von Abhängigkeiten, die Möglichkeit die Ausgaben auf stdout und stderr zusätzlich auch noch auf anderen Wegen ausgeben zu lassen usw.).

testobject

(Themenstarter)

Anmeldungsdatum:
21. Dezember 2020

Beiträge: 5

Hallo zusammen,

ich bin nun eurem Rat gefolgt und bin nun schon ein gutes Stück näher am Ziel. Ich habe eine .service-Datei geschrieben, deren Inhalt ich in einem Forenbeitrag entdeckt habe:

[Unit]
Description=Commit at shutdown, reboot, halt
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target

[Service]
Type=oneshot
ExecStart=/usr/local/testscript

[Install]
RequiredBy=shutdown.target reboot.target halt.target

Die Datei liegt auch in richtigen Verzeichnis.

Im eigentlichen Skript steht nun folgendes:

#!/bin/bash

var=$(date)
cd /home/user/Entwicklung

git -C /home/user/Entwicklung/ update-index --refresh
git -C /home/user/Entwicklung/ status

if [[ `git -C /home/user/Entwicklung/ status --porcelain` ]]; then   

    echo "Changes found"

    git -C /home/user/Entwicklung/ add *
    git -C /home/user/Entwicklung/ add -A
    echo "Changes staged"

    echo Commit soll ausgefuehrt werden $(date) >> /home/user/git_log.txt
    git -C /home/user/Entwicklung/ commit -m "Automatic Commit at $var" >> /home/user/git_log.txt
    echo Commit soll stattgefunden haben $(date) >> /home/user/git_log.txt
    echo "Commit completed successfull"  

else
    echo "No changes"
fi

Wenn ich das Skript über den terminal ausführe, funktioniert es und es entsteht ein neuer Commit, der in git log angezeigt wird. Wenn ich aber den PC herunterfahre / neustarte, wird das Skript ebenfalls ausgeführt und die Änderungen werden gestashed. Allerdings findet kein Commit statt. Deswegen habe ich eine git_log-Datei angelegt. Die zwei echo-Befehle vor und nach dem commit-Befehl werden in die log-Datei geschrieben, jedoch wird die Ausgabe des Commitbefehls beim Herunterfahren / Neustart einfach ausgelassen. Wird das Skript über den Terminal ausgeführt, wird die Commitausgabe auch in die Log-Datei geschrieben.

Seahawk1986: Ich würde jetzt gerne deine Variante zum direkten Vergleich testen. Könntest du mir sagen, was bei workdir in Zeile 2 bzw. bei "$workdir" in Zeile 4 eingefügt werden muss? Ich stehe gerade etwas auf dem Schlauch. Das System weiß ja nicht, in welchem directory das git-repository liegt?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11243

Wohnort: München

testobject schrieb:

Seahawk1986: Ich würde jetzt gerne deine Variante zum direkten Vergleich testen. Könntest du mir sagen, was bei workdir in Zeile 2 bzw. bei "$workdir" in Zeile 4 eingefügt werden muss? Ich stehe gerade etwas auf dem Schlauch. Das System weiß ja nicht, in welchem directory das git-repository liegt?

Ich habe das Skript so gestaltet, dass es eines oder mehrere Verzeichnisse aus den übergebenen Argumenten nehmen kann (und die Systemd-Unit übergibt das Verzeichnis an das Skript) - für die Syntax siehe https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Looping-Constructs:

for
The syntax of the for command is:

for name [ [in [words …] ] ; ] do commands; done
Expand words (see Shell Expansions), and execute commands once for each member in the resultant list, with name bound to the current member.
If ‘in words’ is not present, the for command executes the commands once for each positional parameter that is set, as if ‘in "$@"’ had been specified (see Special Parameters).

Kleines Beispiel:

1
2
3
4
5
# print_args.sh
for arg
do
    echo "$arg"
done
$ bash print_args.sh foo bar baz
foo
bar
baz 

Den Shebang musst du vermutlich auch noch auf #!/bin/bash anpassen (bei mir hat das so funktioniert, weil ich als Standard-Shell für sh die Bash konfiguriert habe).

Die Ausgabe des Skripts landet in Log (vgl. systemd/journald) - da das sowohl stdout als auch stderr umfassen sollte,

testobject

(Themenstarter)

Anmeldungsdatum:
21. Dezember 2020

Beiträge: 5

Hallo Seahawk1986,

ich muss leider nochmal fragen. Ich habe gestern deine Vorschläge so übernommen, bedeutet eine neue .service-Datei unter /etc/systemd/system/ angelegt und deinen Inhalt eingefügt, lediglich in Zeile 7,8 und 10 habe ich user durch meinen Account-Namen ersetzt. Weiterhin habe ich ein neues Script unter /usr/local/bin/ angelegt mit wieder deinem Inhalt und .bash in Zeile 1. Diese Datei habe ich anschließend ausführbar gemacht.

Danach habe ich die .service-Datei mit systemctl start auto_commit.service gestartet, den autostart mit systemctl enable autocommit.service aktiviert und es wurde noch eine Meldung angezeigt, dass neue Units eingeladen werden sollen, deswegen habe ich noch systemctl daemon-reload ausgeführt.

Folgender Zustand:

Aktuell lässt sich mein Laptop weder herunterfahren, noch neustarten. Nach jeweiliger Befehlseingabe wird der Bildschirm kurz schwarz und kehrt dann in den Anmeldebereich zurück. Dies bleibt auch so, wenn ich die .service-Datei mit systemctl stop auto_commit.service beende. Ich habe mit journalctl -n auto_commit.service -l den Log-Eintrag überprüft. Folgendes wird angezeigt:

-- Reboot --
Dez 22 09:26:38 johannes-GE70-2QD systemd[1]: Starting autocommit changes in workdir(s)...
Dez 22 09:26:38 johannes-GE70-2QD systemd[1]: Finished autocommit changes in workdir(s).
Dez 22 09:31:05 johannes-GE70-2QD systemd[1]: Stopping autocommit changes in workdir(s)...
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]: Auf Branch master
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]: Unversionierte Dateien:
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]:   (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]:         test
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]: nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]: (benutzen Sie "git add" zum Versionieren)
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4791]: Changes found
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4809]: error: Unzureichende Berechtigung zum Hinzufügen eines Objektes zur Repository-Datenbank .git/objects
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4809]: error: test: Fehler beim Einfügen in die Datenbank
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4809]: error: Konnte Datei 'test' nicht indizieren.
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4809]: fatal: Hinzufügen von Dateien fehlgeschlagen
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4791]: Changes staged
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4791]: Commit completed successfull
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]: Auf Branch master
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]: Unversionierte Dateien:
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]:   (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]:         test
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]: nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]: (benutzen Sie "git add" zum Versionieren)
Dez 22 09:31:05 johannes-GE70-2QD systemd[1]: testscript2.service: Succeeded.
Dez 22 09:31:05 johannes-GE70-2QD systemd[1]: Stopped autocommit changes in workdir(s).

Das Reboot kommt durch gewaltsames Ausschalten über den Power-Knopf. Interessant ist, dass beim Ausführen von shutdown die .service-Datei nicht beendet wird, bzw. die auto-commit-Datei nicht ausgeführt wird. Erst bei manuellem Beenden (09:31:05) der .service-Datei über den Terminal wird die auto_commit-Datei ausgeführt (wenn auch mit einem Fehler). Mir tut es echt schon leid, dass ich wieder fragen muss, aber ich habe gestern Abend und heute Früh versucht das Problem zu lösen, beispielsweise, indem ich die .servce-Datei über systemctl stop beende und dann versuche ihn herunterzufahren, aber das hat leider nicht geholfen.

NACHTRAG: Ich habe eben festgestellt, dass mein erster Versuch einer Service-Routine noch hinterlegt war. Durch systemctl disable ... konnte ich diese Beende, nun fährt er wieder runter. Lediglich das Problem der fehlenden Berechtigung ist noch vorhanden. Ich versuche das nun auch noch final zu lösen.

Schöne Grüße

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11243

Wohnort: München

testobject schrieb:

Ich habe mit journalctl -n auto_commit.service -l den Log-Eintrag überprüft. Folgendes wird angezeigt:)–

-- Reboot --
Dez 22 09:26:38 johannes-GE70-2QD systemd[1]: Starting autocommit changes in workdir(s)...
Dez 22 09:26:38 johannes-GE70-2QD systemd[1]: Finished autocommit changes in workdir(s).
Dez 22 09:31:05 johannes-GE70-2QD systemd[1]: Stopping autocommit changes in workdir(s)...
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]: Auf Branch master
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]: Unversionierte Dateien:
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]:   (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]:         test
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]: nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4806]: (benutzen Sie "git add" zum Versionieren)
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4791]: Changes found
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4809]: error: Unzureichende Berechtigung zum Hinzufügen eines Objektes zur Repository-Datenbank .git/objects
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4809]: error: test: Fehler beim Einfügen in die Datenbank
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4809]: error: Konnte Datei 'test' nicht indizieren.
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4809]: fatal: Hinzufügen von Dateien fehlgeschlagen
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4791]: Changes staged
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4791]: Commit completed successfull
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]: Auf Branch master
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]: Unversionierte Dateien:
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]:   (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]:         test
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]: nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien
Dez 22 09:31:05 johannes-GE70-2QD autocommit-changes[4812]: (benutzen Sie "git add" zum Versionieren)
Dez 22 09:31:05 johannes-GE70-2QD systemd[1]: testscript2.service: Succeeded.
Dez 22 09:31:05 johannes-GE70-2QD systemd[1]: Stopped autocommit changes in workdir(s).

NACHTRAG: Ich habe eben festgestellt, dass mein erster Versuch einer Service-Routine noch hinterlegt war. Durch systemctl disable ... konnte ich diese Beende, nun fährt er wieder runter. Lediglich das Problem der fehlenden Berechtigung ist noch vorhanden. Ich versuche das nun auch noch final zu lösen.

Da würde ich vermuten, dass bestimmte Dateien (vor allem im Unterordner .git im Repository) nicht dem Nutzer gehören, unter dem die Systemd-Unit ausgeführt wird (oder er hat keine Schreibrechte) - beides könnte ein Nebeneffekt davon sein, dass deine früheren SysV-Init Skripte mit root-Rechten ausgeführt wurden, als sie von Systemd geparsed wurden.

Ich würde mal versuchen die Rechte gerade zu ziehen:

sudo chown -R $USER:$USER ~/Entwicklung
sudo find ~/Entwicklung -type d -exec chmod ug+rwx {} +
sudo find ~/Entwicklung -type f -exec chmod ug+rw {} + # oder was du da sonst an Rechten garantiert vergeben willst 

testobject

(Themenstarter)

Anmeldungsdatum:
21. Dezember 2020

Beiträge: 5

Hallo Seahawk1986 und an alle anderen,

die gute Nachricht: es funktioniert nun alles wie es soll. Seahawk hatte recht, ich musste die Rechte gerade ziehen. Mit den vorgeschlagenen Befehlen funktioniert nun alles und es wird bei Änderungen automatisch commited.

Vielen Dank für die Unterstützung und die Geduld, ihr habt mir sehr geholfen und ich habe definitiv viel gelernt.

Antworten |