it-swarm.com.de

Wie kann ich ein Skript in /etc/init.d erstellen, das beim Booten beginnt?

Ich glaube, ich habe vor einiger Zeit etwas darüber gelesen, aber ich kann mich nicht erinnern, wie es gemacht wurde. Im Wesentlichen habe ich einen Dienst in /etc/init.d, Den ich beim Booten automatisch starten möchte. Ich erinnere mich, dass es etwas mit der Verknüpfung des Skripts mit dem Verzeichnis /etc/rc.d Zu tun hat, aber ich kann mich derzeit nicht erinnern. Was ist der Befehl dafür?

Ich glaube, ich bin auf einem Fedora/CentOS-Derivat.

87
Naftuli Kay

Wenn Sie sich wie erwähnt auf einem Red Hat-basierten System befinden, können Sie Folgendes tun:

  1. Erstellen Sie ein Skript und platzieren Sie es in /etc/init.d (Z. B. /etc/init.d/myscript). Das Skript sollte das folgende Format haben:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

Das Format ist ziemlich normal und Sie können vorhandene Skripte in /etc/init.d Anzeigen. Sie können das Skript dann wie folgt verwenden: /etc/init.d/myscript start Oder chkconfig myscript start. Die Manpage ckconfig erklärt den Header des Skripts:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

Der Beispiel-Start-, Stopp- und Statuscode verwendet Hilfsfunktionen, die in /etc/init.d/functions Definiert sind.

  1. Aktivieren Sie das Skript

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Überprüfen Sie, ob das Skript tatsächlich aktiviert ist. Für die ausgewählten Ebenen sollte "Ein" angezeigt werden.

    $ chkconfig --list | grep myscript
    
115
canen

Sie testen, in welchen Runlevel Ihre Maschine normalerweise startet.

runlevel

Oft ist dies 5 oder 2 - es gibt verschiedene Konventionen, aber nichts wirklich Etabliertes, afaik. Ubuntu verwendet 2, während die frühere Distribution, die ich verwendet habe, immer verwendet wurde

  • 1 Einzelbenutzer (Superuser)
  • 2 Mehrbenutzer
  • 3 Multi User + Netzwerk
  • 4 nicht verwendet/benutzerdefinierbar
  • 5 Mehrbenutzer, Netzwerk + X11

Dann erstellen Sie einen Symlink aus Ihrem Init-Skript, vielleicht /etc/init.d/foobar bis /etc/rc2.d/SXYfoobar

S bedeutet 'Starten Sie dieses Skript in diesem Runlevel (hier: 2). XY ist eine zweistellige Dezimalzahl, die für die Sequenz relevant ist, die Skripte werden gestartet.

Wenn Sie vom Skript S45barfoo abhängig sind, das vor Ihnen ausgeführt werden soll, und S55foofoo von Ihrem Skript abhängt, würden Sie xy zwischen 45 und 55 wählen. Für gleiche Zahlen ist die Startreihenfolge undefiniert.

Ubuntu hat inzwischen auf eine andere Startprozedur umgestellt (wechselt), die upstart heißt.

Und Hinweis: Nicht immer verlinken die Links auf /etc/rcX.d - manchmal ist es /etc/init/rcX.d oder ähnliches, aber es sollte leicht zu finden sein, irgendwo unter/etc.

Wenn Sie am Ende der Startskripte etwas starten möchten, /etc/rc.local wäre eine zu suchende Datei, aber wenn dies davon abhängt, dass X11 bereits ausgeführt wird, suchen Sie möglicherweise nach einer Autostart-Option Ihrer Desktop-Umgebung oder nach /etc/X11/Xsession.d/ mit einem ähnlichen Muster wie oben beschrieben.

Wenn Sie davon abhängig sind, dass das Netzwerk aktiv ist, gibt es ein separates Verzeichnis (if-up.d) und für gemountete Geräte wie externe USB-Laufwerke /etc/udev/rules.d/.

10
user unknown

Als Naftuli Tzvi Kay oben nach Debian fragte: Ab Debian 6 sollte Ihr Skript einen LSB-Header (Linux Standards Base) enthalten, der seine Abhängigkeiten und Fähigkeiten angibt ( siehe Debian-Wiki-Seite ).

Wenn ein LSB-Header vorhanden ist, können Sie insserv verwenden, um Ihr Skript in den Startvorgang einzubeziehen ( siehe eine andere Debian-Wiki-Seite ).

3
mdt