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

Problem mit Reihenfolge bei den Runlevel

Tagchen

Ich hätt mal ne Frage und zwar:

Ich würd gern ein Skript über Runlevel 3+5 starten
Es soll beim Start ausgeführt werden und ist aber von FAM abhängig.
Der Reihenfolge beim starten nach müsste FAM vor meinem Skript gestartet werden allerdings funktioniert es nicht. Es wird immer mein Skript gestartet, bevor FAM gestartet wird.

Die Links sehen bei mir wie folgt aus: K23meinprog, K07fam
S23meinprog, S07fam

Wenn ich das so mache müsste doch eigentlich fam vor meinem skript gestartet werden aber es will einfach nicht.

Kann mir vielleicht jemand weiterhelfen wie ich es schaffe, dass fam vor meinem skript gestartet wird?

Gruß Alex
 
:roll: Deine Distribution?

Bei SuSE Linux solltest du es unterlassen die Links manuell zu setzen/ändern.

Verpass dem Script einen LSB-Konformen Header und binde es mit insserv oder dem YaST - Runlevel Editor ein.

In dem Header kannst du auch festlegen welche Dienste vorher gestartet werden müssen.

=> Runlevel scripte - Scripts selber erstellen
Beispielscript: /etc/init.d/skeleton
 
Erstmal danke für die schnelle Antwort!

Also verwendet wird Suse 10.0

Ich habs zuvor mit
Code:
chkconfig
probiert
Wenn ich einen reboot mache bzw. shutdown wird das was in dem Skript steht wunderbar ausgeführt.

Um es etwas näher zu bringen:

Das ganze soll für ne Art Backup System sein. Ein Programm verwendet FAM um gewisse Verzeichnisse auf etwaige Änderungen zu überwachen.
Wenn eine Änderung geschieht wird der Pfad des Verzeichnisses wo etwas geändert wurde in ne Datei gespeichert.
Bei einem System Shutdown wird ein Skript aktiviert, dass diese Datei ausliest (den Verzeichnis Pfad). Von einem zuvor gemachten Backup wird dann das original Verzeichnis über das geänderte gespielt und somit ist die original Konfiguration wieder vorhanden.

Soweit funktioniert alles bis auf den Systemstart wo eben FAM vor meinem Monitoring Programm gestartet werden muss.
Ich denke, dass es viell. sein kann das ich mein Prog. erst nach einem Benutzerlogin starten sollte damit es aktiv wird.
Kann es das viell. sein? Wenn ja wie wirds gemacht?

Anbei hab ich noch den Code für das Skript in der init.d:

Code:
#!/bin/sh
#chkconfig: 2345 65 35

case "$1" in

start)  echo "Fam wird gestartet"
	/etc/init.d/fam start
	echo "Läuft FAM?"
	/etc/init.d/fam status
	echo "Monitor Programm wird gestartet"
	/Pfad/zu/meinem/Programm
	echo "Läuft FAM noch?"
	/etc/init.d/fam status
	;;
stop)
	echo "Backup wird ausgefuehrt"
	/etc/init.d/shutdownbackup
	;;
restart)
	/etc/init.d/shutdownbackup
	;;
esac
exit 0

Gruß Alex
 
in deinem Script fehlt der "Prolog":
Beispiel named:
### BEGIN INIT INFO
# Provides: named
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start: ldap
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Domain Name System (DNS) server, named
# Description: Berkeley Internet Name Domain (BIND) implementation of the
# Domain Name System (DNS) server named.
### END INIT INFO

d.h. vor named muss ers alles was in RequiredStart steht gestartet werden.
 
Gut danke für die Antworten werd mir das jetzt mal geben.

Was ich noch sagen wollte:

Nachdem FAM gestartet wird rufe ich mein Monitor Prog. auf.
Das Prog sagt mir immer FAM: Connection refused
Und wenn ich dann nochmal nachfrage ob Fam läuft kommt die Meldung: unused (auf deutsch läuft nicht mehr)

Gruß Alex
 
Also ich hab das ganze jetzt mal mit dem Prolog ausprobiert allerdings will es noch immer nicht.

Wenn ich FAM über mein Skript starte, dann nach dem Status abfrage, kommt die Meldung das FAM aktiv ist.
WEnn ich nun aber mein Monitoring Script starte, kommen einige Meldungen mit "Famconnection refused". Nachdem Script start frage ich FAM nochmal ob es läuft, und siehe da es läuft nicht mehr (unused).

Weiß einer von euch vielleicht Rat wie ich es schaffe, mein Monitoring Script automatisch starten zu lassen?

Danke für die bisherigen Antworten!

Gruß Alex
 
oc2pus schrieb:
in deinem Script fehlt der "Prolog":
Beispiel named:
### BEGIN INIT INFO
# Provides: named
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start: ldap
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Domain Name System (DNS) server, named
# Description: Berkeley Internet Name Domain (BIND) implementation of the
# Domain Name System (DNS) server named.
### END INIT INFO

d.h. vor named muss ers alles was in RequiredStart steht gestartet werden.

Ich habe die Einstellungen in meinem Startup Skript in der obigen Form vorgenommen. Dazu habe ich noch eine Frage. Ist es richtig, dass die Variablen z. B. $network sich aus den Namen der Skripte im Ordner /etc/init.d/ ableiten? Ich habe versucht mein Skript nach dem Skript "postgresql" starten zu lassen. Es wird jedoch immer davor ausgeführt:
### BEGIN INIT INFO
# Required-Start: $postgresql
# Default-Start: 3 5
# Description: Auswertung Telefonanrufe
### END INIT INFO
 
Hawky schrieb:
Ich habe die Einstellungen in meinem Startup Skript in der obigen Form vorgenommen. Dazu habe ich noch eine Frage. Ist es richtig, dass die Variablen z. B. $network sich aus den Namen der Skripte im Ordner /etc/init.d/ ableiten? Ich habe versucht mein Skript nach dem Skript "postgresql" starten zu lassen. Es wird jedoch immer davor ausgeführt:
### BEGIN INIT INFO
# Required-Start: $postgresql
# Default-Start: 3 5
# Description: Auswertung Telefonanrufe
### END INIT INFO

siehe dazu man insserv, es gibt auch vordefinierte "symbolische Namen", ansonsten ist es der Name des runlevel-scriptes.

hast du auch ein insserv nach jeder Änderung deines Scriptes ausgeführt ? damit wird nämlich die Reihenfolge neu berechnet.
 
oc2pus schrieb:
siehe dazu man insserv, es gibt auch vordefinierte "symbolische Namen", ansonsten ist es der Name des runlevel-scriptes.

hast du auch ein insserv nach jeder Änderung deines Scriptes ausgeführt ? damit wird nämlich die Reihenfolge neu berechnet.

Im Beispiel zum Aufbau eines "Startup Scripts" unter "/etc/init.d/skeleton.compat" fand ich folgende Erklärung:

When specifying hard dependencies or ordering requirements, you can
# use names of services (contents of their Provides: section)
# or pseudo names starting with a $.

Bei mir funktioniert es nun durch das Entfernen des $ Zeichens mit:

# Required-Start: postgresql

Besten Dank für die schnelle Hilfe,
Hawky
 
Oben