Sie sind nicht angemeldet.

1

12.07.2011, 10:37

Erstellung Init-Skript für Shutdown

Hallo,

ich würde gern beim Herunterfahren des System ein Skript ausführen.
Also dachte ich mir ein "init.d"-Skript zu basteln, welches wiederum das Skript aufruft.

Das Skript habe ich so weit fertig:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/sbin/runscript

depend()
{
	use localmount
	need killprocs
	before mount-ro localmount
}

start()
{
	# Flush all pending disk writes now
	sync; sync

	/usr/local/bin/cleanup.sh
}

Dann habe ich es mit "rc-update add cleanup shutdown" registriert.

Leider funktioniert es nicht wie gewünscht. Das Skript wird erst aufgerufen, wenn die Partitionen bereits ausgehangen worden sind.
Eigentlich dachte ich, diesen Aspekt mit dem "depend()" erschlagen zu können.

Könnte mir jemand sagen, wie die Abhängigkeiten korrekt aussehen müssten?
Versuche mit Skripten im "default"-Runlevel haben prima geklappt.

Vielen Dank im voraus,
Matthias

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »semmelb« (15.07.2011, 12:15)


2

12.07.2011, 15:51

Hallo,

wenn es beim herunterfahren ausgeführt werden soll, sollte es nicht bei start, sondern bei stop stehen.

Quellcode

1
2
start()
{


sollte dann in in

Quellcode

1
2
stop ()
{


geändert werden.

Gruß
Alienware 17 R3 16 GB RAM
NVIDIA GTX970 Optimus
Intel Corporation Wireless 8260 AC
Blu-ray Disc ROM & DVD+/-RW
Ubuntu Gnome Desktop
+
Samsung Aktivbook 8, 16 GB DDR3-1666, 2000 GIG SATA
ATI Radeon HD 8870M
Intel Corporation Centrino Advanced-N 6235
Blu-ray Disc ROM & DVD+/-RW
Xbuntu mit debootstrap
+
Intel Core 2 Duo
2 GB MB RAM
ca. 3,5 TB SATA
TBS6980 Dual DVB S2
YaVDR amd64 + VDR1.7.x + XBMC + VDPAU


Mein Overlay:

Quellcode

1
layman -a amielke-overlay

3

12.07.2011, 15:56

Der Aufruf des Skriptes funktioniert ohne Probleme. Nur leider sind dann bereits die Laufwerk ausgehängen.

start() und stop() beziehen sich doch auf das Skript selbst und nicht auf den Status des Init-Systems.
Stop() wird beim Beenden des Skriptes aufgerufen. Dazu muss aber erst ein Start() erfolgt sein.

Ich habe mich da am "mount-ro"-Skript orientiert.

4

12.07.2011, 16:00

Die "shutdown" Dienste werden erst ausgeführt, wenn auch die "boot" Dienste beendet wurden. Dh. im "shutdown" Runlevel kannst Du die Ausführung von "localmount stop" nicht verhindern, da dieser Dienst im "boot" steht. Verschiebe Dein Skript auch in das "boot" Runlevel. Dann must Du wie Planeshift schon gesagt hat "start" und "stop" tauschen.

MOD_Edit
Beim Hochfahren werden alle Dienste aus "sysinit" "boot" und "default" gestartet [ start() ].
Beim Runterfahren werden alle laufenden Dienste beendet [ stop() ] und die Dienste aus "shutdown" gestartet [ start() ]

Daher musst Du für den Runlevel "boot" start und stop vertauschen.
Für den ersten Test musst Du Dein Skript manuell starten, damit er beim Runterfahren beendet wird.
/Mod_edit
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »bell« (12.07.2011, 16:12)


5

14.07.2011, 11:40

Vielen Dank, so klappts! :thumbsup:

Mit folgendem Skript funktiontiert es:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/sbin/runscript

depend()
{
	use localmount
	need killprocs
	before mount-ro
}

start()
{
	einfo "Nothing to do, functionality in stop()"
}

stop()
{
	# Flush all pending disk writes now
	sync; sync

	/usr/local/bin/cleanup.sh
}


Trotzdem würde mich noch die Abhängigkeitsdefinition interessieren.
Machen meine Angaben Sinn? Sind sie überhaupt notwendig?

Kennt jemand eine Übersicht zu den depend()-Angaben?
Es sind ja nicht nur Skripte als Angaben möglich.

Gruß,
Matthias