jiggiwowow
Goto Top

Raspbian Jessie: Shellscript beim Herunterfahren ausführen

Hi,

habe ein Raspberry Pi 2 mit Jessie am Laufen, das soll bestimmte Ordner per rsync auf einen angeschlossenen USB-Stick kopieren und danach ein Tar davon erstellen.
Das mit dem Script läuft auch alles super beim Ausführen. Mein Problem ist nur, dass das Ausführen beim Shutdown nicht funktionieren will, es scheint, als riefe er das Script gar nicht auf.


Ich habe Folgendes gemacht:

/etc/init.d/backup.sh angelegt, Dateiberechtigungen wie bei den anderen Dateien in diesem Ordner.
In /etc/rc0.d/K00backup.sh einen Symlink auf o.g. Datei erstellt, Berechtigungen des Symlinks OK.

Als es nicht ging, habe ich eine shebang-Line an den Anfang des Scripts eingefügt. Bin danach auf die Kommentarzeilen in den anderen Scripten in /etc/init.d aufmerksam geworden. Werden diese Zeilen tatsächlich benötigt oder gehören die nur "zum guten Ton"?

Habe auch schon als Präfix K01 ausprobiert, dasselbe Ergebnis.
Shutdown leite ich mit "shutdown -h now" ein.

Hat jemand eine Idee? Bitte verzeiht mir, falls ich mich evtl. schwammig ausdrücke, bin Linux-Neuling und hab bisher größtenteils Windows-Erfahrung. Das ist ein privates Lernprojekt von mir.

Schon mal vielen Dank vorab.

jiggi

Content-ID: 312766

Url: https://administrator.de/forum/raspbian-jessie-shellscript-beim-herunterfahren-ausfuehren-312766.html

Ausgedruckt am: 23.12.2024 um 06:12 Uhr

Lochkartenstanzer
Lochkartenstanzer 16.08.2016 um 18:19:51 Uhr
Goto Top
Zitat von @jiggiwowow:

In /etc/rc0.d/K00backup.sh einen Symlink auf o.g. Datei erstellt, Berechtigungen des Symlinks OK.


Wieso nur in rc0? das Killskript muß in die verzeichnisse it dem Runlevel, von dem aus die Kiste heruntergefahren wird, also z.B. 3 oder 5 (oder alle).

lks
jiggiwowow
jiggiwowow 16.08.2016 um 19:22:35 Uhr
Goto Top
Danke für deine Antwort. Verstehe ich es richtig, dass die K-Scripte dann ausgeführt werden, wenn man aus dem runlevel rausgeht?

Bislang hatte ich es so verstanden, dass beim Wechsel zu rc0 nur die Skripte in rc0.d/ ausgeführt werden.

jiggi
Lochkartenstanzer
Lochkartenstanzer 16.08.2016 um 19:42:23 Uhr
Goto Top
Zitat von @jiggiwowow:

Bislang hatte ich es so verstanden, dass beim Wechsel zu rc0 nur die Skripte in rc0.d/ ausgeführt werden.


Die killskripte des runlevels, das verlassen wird und die startskripte des runlevels in das gewechselt wird.

lks
jiggiwowow
jiggiwowow 16.08.2016 um 20:25:03 Uhr
Goto Top
Verständnisfrage: rc0.d ist der shutdown-runlevel. Wenn ich mein Script als S01backup.sh symlinke, dann werden beim Beginn des shutdown-runlevel alle startskripte in rc0.d ausgeführt. Warum funktioniert das so nicht?
Sheogorath
Lösung Sheogorath 16.08.2016 um 21:48:07 Uhr
Goto Top
Moin,

zunächst: Ja, diese erste Zeile, ist mehr als nur ein bisschen guter Ton. Es ist die Information mit welchem Programm diese Datei gestartet wird. So wie unter Windows die Dateiendung. Denn die interessiert unter Linux niemanden. Ein Bashscript kann hier genauso .exe heißen, wie ein Textdokument, ohne dass es zu irgendwelchen Einschränkungen kommt.

Da du aber unter Debian/Raspbian Jessie unterwegs ist, könnte man auch, statt mit dem sich in ablöse befindlichen 'System V' zu qälen auch einfach mit systemd arbeiten, welches dir hier die meiste Arbeit abnimmt.

Dein Skript kannst du hier einfach irgendwo in deinem Filesystem ablegen und dann folgendes in `/etc/system/systemd/myscript.service` hinterlegen:
[Unit]
Description=My shutdown script 
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target


[Service]
ExecStart=/path/to/script.sh
Type=oneshot

Jetzt noch testen: `systemctl start myscript.service`

Wenn es tut, was es soll, kannst du nun zu guter Letzt noch das ganze "scharf schalten".

Dazu machst du `systemctl enable myscript.service`

Fertig.

Nicht mehr, nicht weniger ;)
Zukunft kann manchmal so einfach sein :X

Gruß
Chris
jiggiwowow
jiggiwowow 16.08.2016 um 22:33:22 Uhr
Goto Top
Hi Chris,

Musste noch eine [Install]-Sektion einfügen, danach hats funktioniert. Vielen Dank dafür!
Trotz allem wurmt es mich irgendwie, dass das mit sysvinit nicht funktioniert hat. LKS weiß vielleicht, was ich falsch gemacht habe oder evtl. nicht kapiert hab.

Gute Nacht,

jiggi