Ich bin ziemlich neu bei Linux und möchte wissen, was zu tun ist, um beim Start des Computers eine .sh-Datei zu starten. Grundsätzlich habe ich einen Servercomputer mit Linux-Betriebssystem und möchte beim Neustart/Absturz des Systems eine JBoss-Anwendung ausführen
Ich habe S99jBossServers
rc2.d mit Link hinzugefügt /etc/rc.d/init.d/jBossServers.sh
und volle Berechtigung(777) erteilt fürjBossServers.sh
Der Inhalt jBossServers.sh
ist wie folgt
#!/bin/sh
#
# chkconfig: 2345 80 30
# description:
#
RETVAL=0
start () {
/root/batch/startSikkimCA.sh
/root/batch/startSikkimSp.sh
}
stop () {
/root/batch/stopSikkimCA.sh
/root/batch/stopSikkimSp.sh
RETVAL=$?
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
start
;;
*)
start
;;
RETVAL=$?
esac
exit $RETVAL
Ich bin nicht sicher, ob es richtig ist oder nicht, aber die beiden Pfade wurden in
start() und stop()
sind korrekt, aber die Anwendung startet beim Neustart des Computers trotzdem nicht.
Antwort1
AnsehendrinDies ist der herkömmliche Prozessstarter und führt Skripte unter /etc/init.d
, /etc/rc1.d
, usw. und aus /etc/rc.local
. Dies ist wahrscheinlich der gewünschte Speicherort.
Einige Distributionen verwendenEmporkömmlingstattdessen – wenn ja, sehen Sie sich die entsprechenden Dokumente an.
In beiden Fällen können die genauen Pfade je nach Distribution unterschiedlich sein, dies sollte jedoch für den Anfang ausreichen.
Antwort2
Versuchen Sie zu überprüfen, ob Ihre Skripte gestartet werden (z. B. indem Sie touch /var/tmp/startup.script
sie einfügen). Sind alle Befehle in Ihren Skripten beim Booten im Suchpatch?
Runlevel 2 kommt mir ungewöhnlich vor. 3 sollte bei einem Linux ohne GUI normal sein. Welche Distribution und Version verwendest du?
Antwort3
Suchen /etc/inittab
Sie nach einer Zeile wie id:3:initdefault:
. Die Zahl wird wahrscheinlich 3 oder 5 sein, könnte aber auch 2 oder 4 sein. Die Zahl in dieser Zeile ist der Standard-Runlevel. Höchstwahrscheinlich ist es nicht 2, sodass Ihre Skripte in rc2.d nicht ausgeführt werden.
Legen Sie Ihr Skript in das rcN.d-Verzeichnis, das der Nummer in der initdefault
Zeile entspricht.
Im Prinzip ist rc.local die bessere Wahl, aber rc.local variiert so stark von Distribution zu Distribution (manchmal ist es ein Verzeichnis, manchmal ein Skript, manchmal ist es überhaupt nicht eingerichtet), dass es einfacher ist, es einfach in den richtigen Runlevel zu setzen, ohne Ihre Distribution zu kennen. Sie können versuchen, man rc.local
herauszufinden, was das auf Ihrem System bedeutet. Wenn Ihr System rc.local als Verzeichnis unterstützt, setzen Sie Ihr Skript dort ein und machen Sie sich keine Gedanken über die Runlevel.
Stellen Sie außerdem sicher, dass Ihr Skript dem Root-Benutzer gehört und über die Berechtigungen 755 (wenn es von jedem ausgeführt werden können soll) oder 744 verfügt.
Antwort4
Hinzufügen eines Startskripts
Diese Methode funktioniert mit Red Hat, Fedora, Ubuntu (Paket chkconfig und Service installieren), Suse.
Sie sollten Ihr Skript in /etc/init.d kopieren (es ist entweder das richtige Verzeichnis oder ein Link zum richtigen Verzeichnis, sodass es gleich funktioniert).
sudo cp jBossServers.sh /etc/init.d/
sudo chmod 0755 /etc/init.d/jBossServers.sh
Dann müssen Sie es zum Systemstartprozess hinzufügen. Anstatt alle erforderlichen Links zu erstellen, verwenden Sie chkconfig (installieren Sie das Paket zuerst unter Ubuntu).
sudo chkconfig add jBossServers.sh
Wenn ich jetzt die Überschrift Ihres Skripts lese, enthält dieses Skript bereits die Informationen für chkconfig bezüglich der Runlevel und Priorität. Also ist alles in Ordnung. Beim nächsten Neustart wird JBoos gestartet.
Aber Sie könnten versuchen, sofort damit anzufangen
sudo service jBossServers.sh start
Hinweis: Wenn Ihr System sich beschwert, dass es chkconfig oder service nicht findet, versuchen Sie vorher, diese mit /sbin/ aufzurufen. Beispiel
sudo /sbin/chkconfig add jBossServers.sh
sudo /sbin/service jBossServers.sh start