OK, ich habe also ein einfaches Problem: Ich habe eine Live-CD und möchte, dass die CD ausgeworfen wird, wenn der Computer neu gestartet oder angehalten wird.
Beim Ausführen /usr/bin/eject -m
wird die CD einwandfrei ausgeworfen. Wie zu erwarten ist, stürzt das Betriebssystem ab, da jetzt keine Dateien mehr gelesen werden können. Der Neustart findet also nie statt, da nicht darauf /sbin/reboot
zugegriffen werden kann. (Ich habe versucht, reboot --help > /dev/null
direkt vor dem Neustart auszuführen , aber es gibt noch andere Dateien, die immer noch nicht gelesen werden können ...)
Zusammenfassend scheint es, dass ich den Auswurf zum allerletzten Ereignis machen muss. Es scheint also, dass dies systemd
der Welpe ist, mit dem ich spielen muss ... Aber ich habe buchstäblich Stunden meines Lebens damit verschwendet, ihn zu stupsen und zu stupsen, und egal was ich tue, wirft er die CD unter keinen Umständen wirklich aus. Und ich habe keine Ahnung warum. Ich habe ein Dutzend verschiedene Arten des Aufrufens ausprobiert eject
, aber es passiert nie etwas.
Kann mir jemand sagen, wie man am einfachsten rennt eject
? (Ich stelle mir kurz danach umount.target
wäre vernünftig ...)
eject
gibt, geht es dir gut?Antworten:
Schließlich fand mein Kollege den folgenden Artikel:
http://lists.freedesktop.org/archives/systemd-devel/2012-September/006573.html
Zusammenfassend habe ich eine Datei mit dem Namen erstellt,
/lib/systemd/system/eject.service
die enthältIch musste auch laufen
systemctl enable eject.service
machen dies tatsächlich tut nichts. Aber jetztsystemd
wirft die CD kurz vor dem Herunterfahren genau so aus, wie ich es wollte.... leider ist das Betriebssystem immer noch fehlerhaft, wenn der Rest der Dateien mit ausgeworfener CD nicht gefunden werden kann. Ich habe versucht, die obige Datei so anzupassen
After=unmount.target
, dass sie das Skript ausführt, nachdem die Dateisysteme ausgehängt wurden. Aber nein, es gibt immer noch Fehler.Es sieht so aus, als müsste ich herausfinden, wie ich das Live-CD-Image beim Booten in den RAM kopieren kann - aber das ist eine ganz andere Frage ...
quelle
Das Folgende kann Ihnen helfen:
Fügen Sie Ihren Auswurfbefehl unter /etc/init.d/halt.local hinzu
Sie können sich auch die Vorlage /etc/init.d/skeleton ansehen und diese anpassen, um möglicherweise eine Ausgabe hinzuzufügen, z. B. Herunterfahren des Systems, Drücken einer beliebigen Taste zum Auswerfen der CD-ROM usw.
Checken Sie die Skripte in /etc/init.d aus, die mit den Runlevel-Verzeichnissen /etc/rc0.d (halt) verknüpft sind.
quelle
Überprüfen Sie die Skripte in
/etc/init.d
den Runlevel-Verzeichnissen/etc/rc0.d
(halt) und/etc/rc6.d
(reboot). Zum Beispiel habe ich den Befehl zum Auswerfen eingegeben/etc/init.d/reboot
und es hat gut funktioniert.Da ich nicht auf einer Live-CD bin, kann ich nicht testen, was funktionieren würde.
Wenn Sie darüber nachdenken, ist es schwer vorstellbar, ein Skript oder sogar eine kompilierte Binärdatei einzufügen. Sogar eine Binärdatei erfordert einen gewissen Zuweisungs- / Freigabeaufwand, und sobald Sie die CD auswerfen, sind Sie fertig. Es sollte eher wie ein Flag und ein Zeiger auf einen Maschinenbefehl sein, der in einem superpersistenten Speicher abgelegt ist ...
Vielleicht ist es einfacher, den Befehl auszuführen und das Betriebssystem absichtlich zum Absturz zu bringen, aber wenn fast alles offline ist, spielt es keine Rolle, dass Sie Ihr verbleibendes System zum Absturz bringen.
(Bearbeiten) Ein anderer Gedanke: Könnten Sie Ihr Dateisystem irgendwie partitionieren, eine Partition nur für den Auswurfbefehl erstellen und neu starten, alle anderen aushängen und dann den Befehl ausführen? (Aber dann müsste fsck wahrscheinlich angewiesen werden, sich nicht jedes Mal zu beschweren, dass die Eject-Partition nicht korrekt ausgehängt wurde.) Oder könnten Sie sie auf einen USB-Stick stecken? (Dies ist ein sehr interessantes Problem. Wenn Sie es lösen, teilen Sie es uns mit!)
(Edit 2) Was ist mit Zusammenführen von Auswerfen und Neustarten, damit Sie eine Binärdatei erhalten, die in den Speicher geladen wird, die CD auswirft, aber keinen Neustart von einem Dateisystem laden muss, die sich bereits im Hauptspeicher befindet?
quelle
Ubuntu kann verwenden
eject -m; reboot -f
quelle