GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Init.d-Skript wird beim Booten nicht ausgeführt?

Mein Skript läuft nicht beim Booten in einer vagabundierenden Box unter Ubuntu.

Mein Skript sieht so aus –

#!/bin/bash
# /etc/init.d/mailcatcher
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
mailcatcher --http-ip 192.168.50.10

Meine Berechtigungen für die Datei sehen so aus –

-rwxr-xr-x 1 root root 352 Apr 30 09:59 mailcatcher.sh

Ich führe den Befehl –

aus
sudo update-rc.d "mailcatcher.sh" defaults

Wenn ich das Skript manuell ausführe, funktioniert es und startet Mailcatcher. Wenn ich den Computer neu starte, startet der Mailcatcher-Daemon nicht. Übersehe ich etwas?

Akzeptierte Antwort:

Und nun zu den Ubuntu-Antworten.

Dies ist eine Ubuntu-Linux-Frage, und Version 15 ist jetzt veröffentlicht. Die Ubuntu-Welt hat jetzt systemd. Aber auch vor Version 15 hatte die Ubuntu-Welt Auftrieb. Es gibt wirklich keinen Grund, System 5 rc zu schreiben Skripte; und es gibt sicherlich keinen guten Grund, anzufangen von dort.

Sowohl upstart als auch systemd führen alle „Dienstkontrollen“ durch. Alles, was Sie tun müssen, ist den Dienst zu beschreiben .

systemd

Eine systemd-Diensteinheit, die in /etc/systemd/system/mailcatcher.service zu platzieren ist , ist

[Unit]
Description=Ruby MailCatcher
Documentation=http://mailcatcher.me/

[Service]
# Ubuntu/Debian convention:
EnvironmentFile=-/etc/default/mailcatcher
Type=simple
ExecStart=/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

[Install]
WantedBy=multi-user.target

Dadurch erhält man automatisch alle systemd-Steuerelemente, wie zum Beispiel:

  • systemctl enable mailcatcher.service um den Dienst so einzustellen, dass er beim Booten automatisch gestartet wird.
  • systemctl preset mailcatcher.service um den Dienst so einzustellen, dass er beim Booten automatisch gestartet wird, wenn die lokale Richtlinie dies zulässt.
  • systemctl start mailcatcher.service um den Dienst manuell zu starten.
  • systemctl status mailcatcher.service um den Dienststatus anzuzeigen.

Neuling

Upstart ist ähnlich, und die Anpassung der Upstart-Jobdatei von Fideloper LLC an diese Frage ergibt dies für /etc/init/mailcatcher.conf :

description "Mailcatcher"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec /usr/bin/mailcatcher --foreground --http-ip=192.168.50.10

Dadurch erhält man automatisch alle Upstart-Steuerelemente, wie zum Beispiel:

  • initctl start mailcatcher um den Dienst manuell zu starten.
  • initctl status mailcatcher um den Dienststatus anzuzeigen.

Bonus-Daemontools-Abschnitt

Zum Spaß, zur Unterhaltung aller Benutzer von Daemontools-Familien, die dies über eine WWW-Suche erreichen, und um einen weiteren Grund aufzuzeigen, warum man nicht bei System 5 rc beginnen sollte Skripten habe ich diese systemd-Diensteinheit durch die convert-systemd-units des nosh-Toolsets ausgeführt Befehl, um das folgende Ausführungsskript der Daemontools-Familie zu erstellen:

#!/bin/nosh
#Run file generated from ./mailcatcher.service
#Ruby MailCatcher
chdir /
read-conf --oknofile /etc/default/mailcatcher
/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

Eigentlich die convert-systemd-units Befehl generiert ein ganzes nosh Dienstpaket Verzeichnis. Mit diesem Verzeichnis, das Abhängigkeits- und Bestellinformationen angibt, installiert als /var/sv/mailcatcher in einem System mit dem nosh service-manager man bekommt alle Nosh-Steuerelemente, wie zum Beispiel:

  • system-control enable mailcatcher.service um den Dienst so einzustellen, dass er beim Booten automatisch gestartet wird.
  • system-control start mailcatcher.service um den Dienst manuell zu starten.
  • system-control status mailcatcher.service um den Dienststatus anzuzeigen.
  • system-control preset mailcatcher.service um den Dienst so einzustellen, dass er beim Booten automatisch gestartet wird, wenn die lokale Konfiguration (Voreinstellungen im systemd-Stil oder /etc/rc.conf{,.local} ) erlaubt es.
Verwandte:Deaktivieren des Hybridboots in Windows 8?

Fangen Sie nicht einmal an mit System 5 rc Dateien.

Sehen Sie sich diese Vorlage an, die von SaltStack für System 5 rc verwendet wird Skripte. Selbst wenn die SaltStack-Parametrisierung eliminiert wurde, sind das 59 Zeilen Shell-Skriptcode, von denen die meisten generische Boilerplates sind, die Sie neu erfinden und neu schreiben müssten. Wieder. Und Celada hat bereits darauf hingewiesen, wo Sie es schlecht neu erfunden haben.

Die systemd-Unit-Datei ist 11 Zeilen lang. Die Upstart-Jobdatei ist 8 Zeilen lang. Der nosh run Skript ist 6. Und sie erledigen alle Start/Stopp/Status-Mechaniken für Sie. Beginnen Sie nicht mit System V rc , insbesondere nicht unter Ubuntu Linux.

Weiterführende Literatur

  • Mailcatcher einrichten . 2014-10-21. Server für Hacker. Fideloper LLC.
  • James Hunt und Clint Byrum (2014). „Dienstprogramme“. Upstart-Kochbuch .
  • Jonathan de Boyne Pollard (2014). Eine Gegenüberstellung von Ausführungsskripten und Diensteinheiten. . Häufig gegebene Antworten.

Linux
  1. Cron-Job zum Überprüfen, ob das Php-Skript ausgeführt wird, wenn nicht, dann ausführen?

  2. Linux-Betriebssystemdienst „scsi_reserve“

  3. Dienst:Befehl nicht gefunden

  4. Führen Sie das PHP-Skript als Daemon-Prozess aus

  5. Wie lässt sich ein Python-Skript als Dienst ausführen?

So führen Sie ein Skript beim Booten in Debian 11 aus

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

So führen Sie ein Bash-Skript aus

Ruby-Skript als Dienst

Skript mit rc.local ausführen:Skript funktioniert, aber nicht beim Booten

Wie führe ich einen Befehl als bestimmter Benutzer in einem Init-Skript aus?