Wie führt man ein Skript aus, als würde es beim Booten ausgeführt?

Wie führt man ein Skript aus, als würde es beim Booten ausgeführt?

Beim Booten läuft ein Skript, das mir jedoch Fehler anzeigt, die in der Protokolldatei angezeigt werden. Wenn ich es manuell ausführe, läuft es einwandfrei – wahrscheinlich wurde die Umgebung geändert.

Gibt es eine Möglichkeit, ein solches Skript unter Bedingungen auszuführen, unter denen es beim Booten ohne Neustart ausgeführt wird?

Das Skript befindet sich /etc/init.dmit einem symbolischen Link in /etc/rc5.d/S97mounter.sh.

Antwort1

Sie können als Root ausführen

env - scriptname

Dadurch wird Ihre Umgebung vor dem Ausführen des Skripts gelöscht. Ihre bleibt jedoch erhalten shell. Um die Umgebung zu löschen und die Shell auf einzustellen sh, gehen Sie wie folgt vor:

env -i /bin/sh -c scriptname

Dadurch wird das Skript ausgeführt /bin/sh. Allerdings wird die Boot-Umgebung dadurch nicht vollständig simuliert, da dies nicht für die anderen Dienste gilt, die zu diesem Zeitpunkt möglicherweise nicht ausgeführt werden.

Ich habe eine ähnliche Frage zur Simulation der Crontab-Umgebung gefunden und es gibt eine sehr nützliche Lösung vonAbonnieren.

Damit können Sie dies in einem Skript ausführen und den Host neu starten. Anschließend können Sie mit der Umgebungsdatei Ihre Umgebung laden:

Teil eines Boot-Skripts:

env > /var/tmp/bootenv

Um dann zur normalen Laufzeit dieselbe Startumgebung festzulegen, gehen Sie wie folgt vor:

env - `cat /var/tmp/bootenv` /bin/sh -c scriptname

Antwort2

Wenn ein Programm über eine Benutzersitzung und nicht über ein Startskript gestartet wird, können folgende Dinge anders sein:

  • Das Programm erbt viele Umgebungsvariablen (einschließlich PATH, HOME, …).
  • Das Programm erbt mehrere Dateideskriptoren, darunter ein Terminal.
  • Die Grenzwerte können unterschiedlich sein.

Um ein Programm mit einer minimalen Umgebung auszuführen und die Standarddateideskriptoren zu schließen, können Sie etwas wie

env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin myprogram </dev/null >/dev/null 2>/dev/null

Überprüfen Sie die initManpage oder andere Dokumentationen Ihres Systems, um zu sehen, welche Umgebungsvariablen dort definiert sind. Viele Programme, die als Daemons laufen sollen, benötigen diese PATHund sonst nichts. Der PATHobige Wert ist der Standardwert für Init unter Debian.

Antwort3

Ohne weitere Informationen darüber, was Ihr Skript macht und welche Fehler Sie erhalten, ist es schwierig, eine genaue Antwort zu geben. Davon abgesehen ist es wahrscheinlichmöglichum die Umgebung neu zu erstellen, aber das wird wahrscheinlich sehr schwierig sein, da das Aushängen oder Bind-Mounten von Dateisystemen oder andere solche lustigen Dinge erforderlich sein werden.

Eine Alternative könnte darin bestehen, eine virtuelle Maschine zu erstellen, beispielsweise mitVirtualBoxoderKVMund führen Sie damit Ihr Debugging durch, sodass Sie die virtuelle Maschine beliebig oft neu starten können, ohne dass Sie Ihren Hostcomputer neu starten müssen.

verwandte Informationen