Ich habe ein Skript zum Starten eines Servers erstellt (meine erste Frage). Jetzt möchte ich, dass es auf dem System-Boot läuft und den definierten Server startet. Was soll ich tun, um dies zu erreichen?
Laut meinen Ergebnissen befindet sich diese Datei am /etc/init.d
Speicherort. Sie wird ausgeführt, wenn das System gestartet wird. Aber ich kann nicht verstehen, wie das erste Argument beim Start sein wird start
? Ist das vordefinierte irgendwo zu verwenden , start
wie $1
? Wenn ich einen Fall haben möchte, der startall
alle Server im Skript startet, welche Optionen kann ich dann verwalten?
Mein Skript sieht so aus:
#!/bin/bash
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
$0 stop
$0 start
;;
*)
echo "usage: $0 (start|stop|restart)"
;;
esac
linux
shell-script
centos-5
vijay.shad
quelle
quelle
Antworten:
/etc/init.d
ist das Skriptverzeichnis, in dem die ausführbaren Skripte angezeigt werden. Um jedoch nach dem Start Ihres Systems Skripts in einer bestimmten Reihenfolge auszuführen, müssen Sie dem/etc/rc#.d
Verzeichnis Dateien hinzufügen . Einträge, die hier angezeigt werden, teilen Ihrem System mit, in welcher Reihenfolge und auf welcher Ausführungsebene Skripte ausgeführt/etc/init.d
werden sollen. Die Zahl nach dem rc gibt an, mit welchem Runlevel die Maschine gemäß dieser Tabelle läuft:http://en.wikipedia.org/wiki/Runlevel
Also, wenn Sie haben:
Dann brauchen Sie die (leeren) Dateien:
Das S bedeutet Start und das K bedeutet Kill. Wenn Ihr Computer startet, wird das System sagen: "Ah, ich arbeite auf RunLevel 3, gehen wir zu rc3.d, um zu sehen, welche Skripte in '/etc/init.d' ausgeführt werden müssen und in welcher Reihenfolge." In diesem Fall sortiert das System nach 'S' und dann nach 'S' und führt '/etc/init.d/importantscript start' aus. Die 20 dient nur zu Bestellzwecken ... Ihr Skript wird hinter "S19" und vor "S21" ausgeführt. Sie können diese Dateien einfach wie folgt erstellen:
sudo touch /etc/rc.d/rc3.d/S20importantscript
Hier ist auch eine schöne Zusammenfassung: http://www.linux.com/news/enterprise/systems-management/8116-und-einführung-in-services-runlevel-und-rcd-scripts
quelle
Sie müssen --- und sollten --- keine Dateien erstellen
/etc/rc.d/rcN.d/
. Sie sollten stattdessen einen Kommentar in Ihr Init-Skript einfügenwo
NNN
ist die Menge der Runlevel , in denen Sie das Skript aktiv werden sollen (zB345
wenn es in dem Runlevels aktiv ist3
,4
und5
) undA
undB
sind die Start- und Stopp - Prioritäten. Dann werdenchkconfig --add foo
(unter der Annahme, dass Ihr Skript benannt istfoo
) die Dateien/etc/rc.d/rcN.d/
mit den entsprechenden Namen erstellt.Sie können dann mit
service foo bar
der schickenbar
Nachricht an das Skript (zBstart
,stop
, was auch immer - das ist , wo Ihr$1
herkommt).quelle
$ 1 ist das Befehlszeilenargument, das an Ihr Skript übergeben wird. Es kann gestartet, gestoppt oder neu gestartet werden. Ich erinnere mich nicht, dass ich in openSUSE die Option hatte, andere Argumente an das Skript zu übergeben, wenn ich das Runlevel-Editor-Ding verwendete. Daher denke ich, dass dies wahrscheinlich die einzigen sind, die Sie verwenden sollten.
Ich benutze CentOS nicht selbst, aber es scheint, dass das Programm, um zu steuern, was auf welchem Runlevel gestartet wird, ntsysv ist .
quelle