
Ich möchte, dass mein Server mich (per Growl) benachrichtigt, dass der (Neu-)Bootvorgang abgeschlossen ist. Ich habe die PHP-Datei, die das Growl sendet, bereit, weiß aber nicht, in welche Datei ich die Zeile einfügen soll.
Welche Datei muss ich meinem Code hinzufügen, damit er erst nach dem Booten von SuSE ausgeführt wird?
Antwort1
(open)SUSE verwendet /etc/init.d/after.local
zu diesem Zweck. Fügen Sie einfach die Befehle, die Sie ausführen möchten, in diese Datei ein. Beachten Sie, dass dies mit SystemV-Init problemlos funktioniert, bei systemd müsste dies meines Wissens jedoch anders gelöst werden.
Antwort2
Neuere Syntax für Suse Linux Enterprise 11 SP2 (und openSUSE?)
Am besten erstellen Sie ein Shell-Skript, das Ihr PHP-Skript aufruft. Dieses Shell-Skript sollte in seinem Header den folgenden Kommentar enthalten:
#!/bin/sh
### BEGIN INIT INFO
# Provides: nothing
# Required-Start: $all
# Default-Start: 3 5
# Default-Stop: 4
# Short-Description: single_line_description
# Description: multiline_description
### END INIT INFO
Sie finden eine typische Vorlage (mit vielen erklärenden Kommentaren) in /etc/init.d/skeleton
. Diese Vorlage enthält den erforderlichen Code zum Einbinden Ihres PHP-Skripts. Sie sehen einen Startfall, in dem Sie Ihr PHP-Skript aufrufen müssen.
Ich habe eine Reihe optionaler Parameter im Header verworfen, da es den Anschein hat, dass Sie diese nicht benötigen.
Wichtig
Es ist wichtig, das Skelett zumindest der Case-Anweisung zu verwenden (sieheInit-Skript-Aktionen), und um zumindest den Startfall zu implementieren. Im Startfall rufen Sie dort Ihr Skript auf.
Hier finden Sie ein kleines Skriptbeispiel, das am Ende eines Bootvorgangs aufgerufen wird:siehe mein Gist. Ich habe für den Standard-Stopp einen ungültigen Runlevel eingegeben, aber irgendwie wird das Skript trotzdem beim Herunterfahren aufgerufen. Jedenfalls wird beim Herunterfahren der Code im „Stopp“-Fall ausgeführt, nicht der im „Start“-Fall.
Wenn Sie Ihr Skript geschrieben haben, kopieren Sie es nach: /etc/init.d
Nehmen wir an, Ihr Init-Skript heißt „Boot-Benachrichtigung“. Dann würden Sie (als Root) Folgendes tun:
chown root:root boot-notification
chmod 0750 boot-notification
mv boot-notification /etc/init.d/
Anschließend müssen Sie das Skript im Init-System "registrieren". Dazu verwenden Sie den insserv
folgenden Befehl (wieder als Root) oder Sie können YaST verwenden:
insserv boot-notification
Anschließend können Sie überprüfen, ob das Skript als eines der letzten ausgeführten Skripts gilt, indem Sie sich die einzelnen Init-Level ansehen. Wenn Sie nur Runlevel 3 ausgewählt haben, können Sie Folgendes tun:
ls -l /etc/init.d/rc3.d/S*
Dies gibt eine Liste mit Links zu Init-Skripten zurück. Der Link zu Ihrem Skript sollte am Ende (oder in der Nähe) der Liste stehen.
Hinweis: Wenn Sie mit der dynamischeren Methode zum Schreiben von Init-Skripten herumexperimentieren möchten, empfehle ich Ihnen, diese beiden Seiten zu lesen:
Antwort3
Für OpenSUSE 12.2 (Mantis) ist dieSkriptfür „after local“ sollte stehen /etc/init.d/after-local
, und Sie müssen es möglicherweise über systemctl aktivieren, wie folgt …
Zuaktivieren/etc/init.d/after-local,
systemctl enable after-local.service
ZuStatus überprüfenvon /etc/init.d/after-local,
systemctl status after-local.service
Antwort4
Ich habe festgestellt, dass es hierfür zwei Möglichkeiten gibt:
- Öffnen Sie zunächst das Terminal und geben Sie Folgendes ein:
sudo crontab -e
dann tippe
@reboot sudo <command_to_execute_at_startup>
- Zweitens können Sie eine Servicedatei erstellenmit dieser Methode