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.d
mit 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 init
Manpage oder andere Dokumentationen Ihres Systems, um zu sehen, welche Umgebungsvariablen dort definiert sind. Viele Programme, die als Daemons laufen sollen, benötigen diese PATH
und sonst nichts. Der PATH
obige 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.