• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] rc.local wird nicht ausgeführt

Hallo zusammen,

ich benutze Suse Enterprise Linux 11.

Dort möchte ich nach dem Systemstart einen Befehl ausführen. Dafür habe ich in /etc/rc.d ein bash-Skript mit dem Namen rc.local angelegt.
In den Runlevelordnern rc3.d und rc5.d habe ich jeweils das Skript verlinkt:

Code:
lrwxrwxrwx  1 root root   11  3. Nov 17:30 S99local -> ../rc.local

Leider wird es nicht ausgeführt...
Hat jemand eine Idee woran das liegen kann?

Gruß und Danke im vorraus,

Goomba
 
Hallo,

Schau mal hier:

http://www.linux-club.de/viewtopic.php?f=15&t=111343&p=693551#p693551

Gruss,
Roland
 
Nachtrag:

Du kannst eigenen Code ausführen in:

/etc/init.d/boot.local

/etc/init.d/halt.local

Roland
 
Hallo RME,

ich möchte nicht ein Skript für einen kompletten Dienst erstellen, der dann gestartet, gestoppt,... werden kann.
Das wär einbisschen viel, da ich ja nur nach dem Boot-Vorgang einen Befehl ausführen will.

Und genau dafür ist meines Wissens /etc/init.d/rc.local da.
boot.local wird direkt nach dem Bootvorgang, vor allen anderen init-Skripten ausgeführt, rc.local danach.
Und das ist es was ich will, da ich möchte, dass die anderen Dienste schon alle laufen, wenn ich mein Skript ausführe...

Genügt dazu nicht die oben erwähnte verlinkung des Skript in dem Runlevelordnern?

Bitte korriegiert mich, wenn ich was falsch verstanden habe...
 
towo schrieb:
boot.local wird direkt nach dem Bootvorgang, vor allen anderen init-Skripten ausgeführt, rc.local danach.
Wo haste denn die Weissheit her?
"Noch bevor die [...] rc-Dateien die runlevel-spezifischen Dienste starten oder stoppen, wird unmittelbar nach dem Rechnterstart eine Systeminitialisierung durchgeführt.
Der Name des Scripts hängt von der Distribution ab:
[...]
SUSE: /etc/init.d/boot"

Quelle: Linux, Michael Kofler, Addison-Wesley, 8. Auflage
Und boot führt boot.local aus:
Code:
if test -f /etc/init.d/boot.local ; then
    echo -n "System Boot Control: "
    echo "Running /etc/init.d/boot.local"
    /bin/sh /etc/init.d/boot.local

Außerdem:
"In der Datei /etc/rc.d/boot.local können lokale Anpassungen durchgeführt werden. Das Script sollte ausschließlich Kommandos enthalten, die nur ein einziges Mal beim Systemstart ausgeführt werden sollen. Ein typisches Beispiel sind modprobe-Anweisungen, um ein ganz bestimmtes Kernelmodul zu laden. boot.local wird vor den rc-Skripten ausgeführt."

Quelle: Linux, Michael Kofler, Addison-Wesley, 8. Auflage



Und zu rc.local:
"Ein weiteres interessantes Systemkonfigurationsskript ist /etc/rc.d/rc.local, das ausgeführt wird, nachdem die anderen Systeminitialisierungsskripten gelaufen sind. (Wie kann das erreicht werden? Normalerweise wird ein symbolischer Link auf rc.local in jedem der /etc/rc.d/rcN.d-Verzeichnisse mit dem Namen S99local angelegt. Da 99 der höchstmögliche numerische Wert ist, den ein S-Skript haben kann, wird es als letztes ausgeführt. Voilà!) Sie können rc.local editieren, um jeden merkwürdigen oder ungewöhnlichen Systembefehl zur Startzeit ausführen zu lassen. Auch wenn Sie sich nicht sicher sind, wann ein solcher Befehl ausgeführt werden sollte, ist rc.local die richtige Stelle. Auf Debian-Systemen gibt es diese Datei nicht, aber niemand kann Sie daran hindern, selbst eine solche anzulegen und sie von rc aus aufzurufen, wenn Sie das so gewohnt sind. "

Quelle: http://www.oreilly.de/german/freebooks/rlinux3ger/ch054.html
towo schrieb:
Genügt dazu nicht die oben erwähnte verlinkung des Skript in dem Runlevelordnern?
Nein.

Was müsste man denn deiner Meinung nach noch machen?
 

towo

Moderator
Teammitglied
Da war ich wohl etwas verpeilt, weil es boot.local nur bei Suse zu geben scheint.
Um hier aber zu einem Ergebnis zu kommen, müßte man wissen, wie Deine rc.local aussieht.
 
Mein eigentliches Problem ist gelöst.
Bei einem Blick in /etc/init.d/rc ist mir aufgefallen, dass dort das Script after.local aufgerufen wird, falls es vorhanden ist.
Dies erfüllt den gleichen Zweck wie das oben beschriebene rc.local.

Hat auch direkt funktioniert.

Habe zunächst einfach nur einen Befehl zum Testen reingeschrieben:
Code:
#/bin/sh
echo -e "Skript wurde ausgeführt." >> /test
exit 0
Mit after.local klappt es, mit rc.local nicht.
Warum rc.local nicht ausgeführt wird weiß ich nicht...
 
/etc/init.d/before.local (executed before runlevel is entered) und /etc/init.d/after.local (executed after runlevel is reached) werden auch bei openSUSE ausgeführt, im Gegensatz zu /etc/init.d/boot.local sind diese beiden Dateien aber standardmäßig nicht vorhanden.

Da es unwahrscheinlich ist, daß Novell die Enterprise-Versionen diesbezüglich umbaut, sind auch hier die Eintragungen in den vier Dateien /etc/init.d/depend.* maßgeblich. Die für die in /etc/init.d/*.d/ angelegten Verknüpfungen vergebenen Nummern sind lediglich eine Verbeugung an die Vergangenheit (außer man stellt das System auf die "historische" Vorgangsweise um, aber das sprengt hier den Rahmen). Eigene Init-Skripte müssen formal den festgelegten Regeln entsprechen und mit insserv (oder YaST) aktiviert werden, das manuelle Erstellen einer Verknüpfung nützt überhaupt nichts.

Nokobon schrieb:
boot.local wird direkt nach dem Bootvorgang, vor allen anderen init-Skripten ausgeführt, rc.local danach.
Nokobon schrieb:
Und boot führt boot.local aus
Wenn Du Dir vor Augen hältst, wie spät boot.local aufgerufen wird, wirst Du wohl merken, daß der ersten Satz nicht stimmen kann. Eine rc.local ist mir bei openSUSE noch nicht untergekommen (und ich gehe davon aus, daß auch die Enterprise-Versionen diese Datei nicht kennen).
 
Okay, vielen Dank für eure Hilfe.
Ich benutze jetzt wie gesagt, einfach after.local...

Die ganze Sache mit den init-Skripten kann echt verwirrend sein, da es einfach jede Distribution einwenig anders regelt.
 
Oben