Führen Sie das Skript in Runlevel 1 aus

1207
arminb

Ich versuche, ein Skript in Runlevel 1 von auszuführen /etc/inittab. Das Skript, das ich ausführen möchte, sieht folgendermaßen aus:

#!/bin/bash while [ 1 ] do #do something sleep 1 #do something sleep 1 done 

Die inittabZeile sieht so aus:d666:123456:respawn:/root/script_to_run.sh

In Runlevel 2-6 funktioniert alles gut. Wenn ich in Runlevel 1 ( init 1) wechsle, wird das Skript angehalten und nicht mehr ausgeführt.

Ich versuche auch, ein Skript zu behandeln, das aufgerufen wird, bevor Runlevel 0 eingegeben wird. Ich habe diese Zeile ausprobiert in inittab:d667:0:wait:/root/script_to_run_right_before_runlevel_0.sh

0
Welches `init'-System und / oder welche Linux-Distribution? Welche anderen Runlevel 1-Einträge befinden sich in Ihrem `/ etc / inittab`? mr.spuratic vor 11 Jahren 0
In einem eingebetteten System ist Debian GNU / Linux 5.0 debarm. Ein weiterer Eintrag für Runlevel 1 ist `l1: 1: wait: /etc/init.d/rc 1` arminb vor 11 Jahren 0

1 Antwort auf die Frage

1
mr.spuratic

Die Debian-Dokumentation ist nicht explizit, init(8)warnt jedoch nur, dass Runlevel S, 0,1,6 reserviert sind, und außerdem:

Auf einem Debian-System führt die Eingabe von Runlevel 1 dazu, dass alle Prozesse außer Kernel-Threads und das Skript, das den Kill und andere Prozesse in seiner Sitzung ausführt, beendet werden. Daher ist es nicht sicher, vom Runlevel 1 zum Runlevel für mehrere Benutzer zurückzukehren: Daemons, die im Runlevel S gestartet wurden und für den normalen Betrieb benötigt werden, laufen nicht mehr. Das System sollte neu gestartet werden.

Run Level 1 in /etc/inittabist:

l1:1:wait:/etc/init.d/rc 1 

/etc/init.d/rc 1ruft auf, /etc/rc1.d/S*einschließlich der, S01killprocsdie die meisten Dinge töten, die es finden kann, und S21single"welche exec init -t1 S" führt, um in den Einzelbenutzermodus zu wechseln. Einzelbenutzermodus "S" in /etc/inittabist:

~~:S:wait:/sbin/sulogin 

Das bedeutet, dass Sie initeinfach warten müssen, bis Sie suloginzurückkehren, bevor Sie irgendetwas anderes tun.

Kurz gesagt, die Runlevels "1" und "S" sind in Debian "hands-off" (und wahrscheinlich auch die meisten anderen Unixen).

Wenn Sie Ihren inittab-Eintrag über den Eintrag "S" des Systems stellen, wird das initRespawning und das S01killprocsSkript eine Zeit lang dagegen ankämpfen (Sie können dies möglicherweise nicht ohne laufendes syslog feststellen), was wahrscheinlich rassig ist und wahrscheinlich auch nicht Tun Sie, was Sie wollen.

Sie können auf einige der Lage sein, was Sie die Startskripts modifizieren durch eine oder beide benötigen, und eine Umsetzung /etc/initsciptder verschiedenen Aktionen zu überwachen und zu protokollieren init. Dies ist eine wirklich gute Methode, um ein funktionierendes System zu verschließen. Ich empfehle daher, zuerst in einer virtuellen Maschine zu experimentieren ;-).

Ich denke, Ihre anderen Optionen, von denen keine sehr ansprechend erscheint, bestehen darin, eine andere auszuprobieren initoder zu sehen, ob Sie über einen Kernel-Thread tun können, was Sie wollen.