Wie füge ich ein Skript zum Starten und Herunterfahren in Debian hinzu?

12

Der Titel fasst es so ziemlich zusammen.

Wie füge ich eine startup.sh und shutdown.sh meiner Server-App zur Start- und Shutdown-Sequenz des Debian-Betriebssystems hinzu?

Amir Arad
quelle

Antworten:

15

Unter Debian sollten Service & Application Boot- und Shutdown-Skripte abgelegt werden /etc/init.d/.

Debian bietet ein Beispielskript /etc/init.d/skeleton, das Sie nach Ihrem Geschmack für Ihre spezielle Anwendung ändern können.

Sobald es vorhanden ist, rufen Sie an:

# update-rc.d YOURAPP defaults

Debian soll die /etc/rc?.d/Symlinks für Sie hinzufügen .

Wenn Sie ein Menü oder eine grafische Oberfläche bevorzugen, schauen Sie sich das Paket sysv-rc-confoder ksysvan.

MikeyB
quelle
4

Sie können Ihr Skript von /etc/rc.local vor der Zeile mit der Aufschrift exit 0 aufrufen

Was das Herunterfahren Ihrer App angeht , würde ich vorschlagen, ein Skript in /etc/rc0.d einzufügen . Sie müssen ihn mit einem K in Großbuchstaben und dann mit einer zweistelligen Zahl benennen , die die Reihenfolge angibt, in der diese Skripte ausgeführt werden. Anschließend müssen Sie einen Namen eingeben. Es wird mit einem Parameter "stop" aufgerufen, aber Sie können dies für ein einfaches Stoppskript ignorieren.

Brent
quelle
Warum würdest du dich mit rc.local beschäftigen, wenn du schon mit /etc/rcX.d herumspielen musst?
womble
rc.local ist der richtige Ort für einfache Startaufgaben - Sie müssen sich nicht mit Start / Stopp-Parametern usw. befassen. Es ist jedoch nicht möglich, einen Prozess herunterzufahren. Das rc0.d-Zeug ist ein bisschen hacken.
Brent,
3

Schauen Sie sich dies für den Start an .

Erstellen Sie zum Herunterfahren einen Link / kopieren Sie Ihr Skript in einen der Ordner /etc/rcX.d, wobei X das Runlevel ist, auf dem es ausgeführt werden soll. 0 ist das Runlevel zum Herunterfahren für Debian, glaube ich.

Squillman
quelle
Dies ist die Shutdown-Info, die ich brauchte. Danke dafür, @squillman.
Harperville
1

Am einfachsten ist es, vorhandene Skripte zu ändern, die in meinem System funktionieren und für Sounds verwendet werden :)

  • starte, ändere /etc/init.d/rc.local, füge deine sh am Ende der Datei hinzu, bevor: (es wird direkt vor dem Login "screen" ausgeführt)
  • Shutdown, Modify /etc/init.d/halt, Add Your Sh am Anfang der Datei, kurz nach den ersten Kommentaren (es wird vor dem eigentlichen Shutdown-Befehl ausgeführt, der von dieser Skriptdatei aufgerufen wird
  • Neustart wie Herunterfahren, aber in /etc/init.d/reboot
Hühnchen
quelle
1

Seit Debian Jessie wurde das alte initProgramm durch ersetztsystemd !

Überzeugen Sie sich selbst. Run: ls -l /sbin/initund sehen, worauf es zeigt. In diesen Tagen zeigt es auf systemd( /sbin/init -> /lib/systemd/systemd), ein neueres und besseres Initialisierungsprogramm.


DIE AUSGEWÄHLTEN UND ANDEREN ANTWORTEN HIER SIND JETZT VERALTET !!!


* Obwohl Sie mit System-V-Tools weiterhin Skripts auf die alte Art installieren können, ist dies im Allgemeinen keine gute Idee.

man systemd.service sagt: *

Wenn ein Dienst unter einem bestimmten Namen angefordert wird, aber keine Einheitenkonfigurationsdatei gefunden wird, sucht systemd nach einem SysV-Init-Skript mit demselben Namen ... und erstellt dynamisch eine Diensteinheit aus diesem Skript. Dies ist nützlich für die Kompatibilität mit SysV. Beachten Sie, dass diese Kompatibilität ziemlich umfassend ist, jedoch nicht 100%.


Für neuere Debian-Systeme (dh Jessie, Stretch, Buster, etc ...)

Es ist einfacher als du denkst. (-:

Hier ist die neue und bevorzugte Methode zum Installieren von Boot- oder Shutdown-Programmen.

Mit systemdmöchten Sie zunächst eine Unit-Datei erstellen . Eine Unit-Datei besteht hauptsächlich aus Deklarationen, nicht aus Code.

Dann verwenden Sie den systemctlBefehl, um diese Einheit zu aktivieren oder zu starten .

systemderledigt einen Großteil der Arbeit für Sie und erleichtert es beispielsweise, ein kritisches Programm automatisch neu zu starten, wenn es abstürzt oder auf andere Weise getötet wird. Außerdem wird Ihr Programm dort heruntergefahren, wo und wann es standardmäßig ausgeführt werden soll, ohne dass Sie zusätzliche Arbeit leisten müssen.


Beginnen Sie hier zu lernen systemd:

Von Debian und anderswo und etc und etc .


Manpages zum Einstieg:

man systemd.unit - Über Unit-Dateien im Allgemeinen
man systemd.service - Über Service-Unit-Dateien, z. B. Daemons, und Single-Run-Programme.

man systemctl - Befehlszeilenoberfläche
man journalctl - Protokoll anzeigen, was systemd getan hat

man systemd - Über das Init-Programm selbst


Es gibt auch eine Vielzahl anderer Arten von Gerätedateien, z

man systemd.target - für Gruppen und gemeinsame synchronisierte Ziele.

Wenn Sie die oben genannten Grundlagen verstanden haben, klicken Sie auf man -k systemd, um weitere zugehörige Hilfeseiten zu finden.



Was auch immer Sie tun, verwenden Sie unter Debian keines der Folgenden :

  • update-rc.d --Installieren und entfernen Sie Init-Skript-Links im System-V-Stil
  • sysv-rc-conf - Run-Level-Konfiguration für SysV wie Init-Script-Links
  • runlevel - Gibt den vorherigen und aktuellen SysV-Runlevel aus
  • BUM- B OOT U p M anager - ein grafischer Editor runlevel
  • systemadm- Grafisches Frontend für den System- und Service-Manager
    (Übrigens, der Autor hat mir per E-Mail mitgeteilt, dass es zu kaputt ist.)


EIN BEISPIEL:

Diese Unit-Datei startet den NoIP.com-Daemon beim Booten und fährt ihn beim Herunterfahren herunter.

Dieser Dämon, von Zeit zu Zeit sendet meine aktuelle IP - Adresse zu aktualisieren meine DDNS ( D ynamische DNS ( D omain N ame S erver)) - Anbieter - Datenbank, so dass mein Domain - Namen zeigt auf meinem Computer zu halten , wo immer es reist zu.

Diese Gerätedatei befindet sich auf meinem System in der folgenden Einstellungsdatei: /etc/systemd/system/noip2.service

Folgendes ist in der Unit-Datei enthalten:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

Führen Sie eine Unit-Datei manuell aus (z. B. zum Testen):

  • Beginnen Sie mit $ sudo systemctl start noip2.
  • neu starten mit $ sudo systemctl restart noip2.
  • aufhören mit $ sudo systemctl stop noip2.

Konfigurieren Sie das System so , dass beim Starten oder Herunterfahren automatisch eine Unit-Datei ausgeführt wird:

  • Beginnen Sie mit $ sudo systemctl enable noip2.
  • Verwendung beenden mit $ sudo systemctl disable noip2.

Protokoll anzeigen

  • $ sudo journalctl -u noip2
Elliptische Ansicht
quelle