Ich versuche, Mac OS X dazu zu bringen, alle meine VirtualBox-VMs beim Neustart zu speichern. Ich habe bereits ein Skript, das dies tut, aber ich brauche OS X, um dieses Skript vor einem Neustart automatisch auszuführen.
Wenn Mac OS X neu startet, wird /sbin/reboot ausgeführt?
Oder wie könnte man das sonst erreichen?
Launchd sendet eine Frühwarnung vor dem Herunterfahren an alle Skripte/Daemons, die eine StopService()-Subroutine haben . Dies gibt Ihrem Prozess die meiste Zeit zum Aufräumen.
Verwenden Sie einfach launchd, um das Skript zu starten, und lassen Sie es im Hintergrund laufen, bis es Zeit zum Beenden ist.
Nachdem die Dienste, die die Frühwarnung erhalten haben, geschlossen werden, erhalten alle Prozesse ein SIGTERM
Signal einige Sekunden vor den SIGKILL
Atomwaffen.
Sie könnten ein Skript erstellen, das SIGTERM in den Ruhezustand versetzt und abfängt, um Ihren Befehl auszuführen, wenn diese Zeit gekommen ist. Sie müssen sehen, ob das in der Praxis genug Zeit für die Ausführung der Befehle lässt. Dies vermeidet ein wenig Codierung, aber nicht viel - es ist im Allgemeinen besser, einfach einen Daemon aus einem Shell-Skript zu machen.
Aus historischer Sicht - /sbin/reboot
und Runlevels gab es nie auf Darwin / OS X und ist zusammen mit dem Rest von nun rc.shutdown
an veraltet , das ist der Boss. Möglicherweise können Sie rc.shutdown auf Tiger oder früher verwenden (ich habe derzeit keines dieser Bilder zur Hand, um es zu überprüfen). Lion hat sicherlich alle Überreste von rc.d und init.d entfernt.rc
launchd
Vielleicht möchten Sie sehen, ob Sleepwatcher in Ihrem Fall helfen würde. Ich habe es schon eine ganze Weile nicht mehr benutzt - aber es zielt sicherlich darauf ab, Ihr Dilemma zu lösen.
Obwohl Apple die Verwendung von " launchd " empfiehlt , ist es am einfachsten, ein Shell-Skript zu erstellen, indem Sie beispielsweise pico von Terminal verwenden:
pico /Users/Shared/logoutHook.sh
Die Datei kann Folgendes enthalten:
#!/bin/bash
say 'Hasta la vista baby!'
Dann Ausführungsrechte erteilen:
sudo chmod +x /Users/Shared/logoutHook.sh
Verknüpfen Sie schließlich das Skript mit dem Abmeldevorgang:
sudo defaults write com.apple.loginwindow LogoutHook /Users/Shared/logoutHook.sh
Wenn Sie eine andere Anwendung starten, da ich diese nicht getestet habe, denke ich, dass es nützlich sein könnte, mich und Sie zu warnen:
Möglicherweise müssen wir das Abschaltsignal abschalten, um das auszuführen, was wir wollen.
Senden Sie dann ein neues (achten Sie darauf, das von unserem eigenen Skript gesendete Signal nicht zu zerstören )…
Wenn Sie den Haken entfernen möchten:
sudo defaults delete com.apple.loginwindow LogoutHook
Wenn Sie " launchd " verwenden, wäre die Idee, das SIGTERM-Signal zu erfassen. Schau mal in: /System/Library/LaunchDaemons/com.apple.shutdown_monitor.plist
michaelmichael
Andrew J. Brehm
michaelmichael
/etc/rc.shutdown.local
zu platzieren, um es beim Herunterfahren auszuführen. Es hört sich so an, als ob Sie danach suchen.Andrew J. Brehm
Andrew J. Brehm