Wie kann ich meinen Mac zu einem bestimmten Zeitpunkt zwangsweise herunterfahren?

Ich suche nach einer App zum automatischen Herunterfahren, die den Computer zu einem festgelegten Zeitpunkt zwangsweise herunterfährt.

Der wichtigste Teil davon ist, dass das Herunterfahren nicht stornierbar sein sollte (es sei denn, der Prozess ist extrem belastend).

Was meinst du mit "app"? Muss es ein GUI-Programm sein oder ist launchd (was ich unten vorschlage) akzeptabel? Wenn Sie was für eine GUI-App tun, was soll sie tun? Aufforderung zur Uhrzeit, zu der der Computer heruntergefahren werden soll, wenn ausgeführt?
Können Sie das Szenario etwas näher erläutern? Welches Mac- und OS-Modell? Warum ist das Herunterfahren wichtig; Wie definieren Sie eine „belastende“ Aufgabe? Sind Sie damit einverstanden, nicht gespeicherte Daten zu verlieren, oder möchten Sie versuchen, alle Apps zu speichern und zu beenden?
@benwiggy Es geht nur darum, sicherzustellen, dass ich einen anständigen Schlafplan habe. Manchmal bin ich „mittendrin“ oder muss „ein wichtiges YouTube-Video ansehen“. Aber diese Ausreden sind eigentlich nie gut genug, um die Schlafenszeit hinauszuzögern. Wenn die automatische Abschaltung jedoch etwas ist, das ausgeschaltet werden kann, bin ich versucht, sie auszuschalten. Ich möchte dieser Versuchung widerstehen. Mir geht es gut, wenn ich nicht gespeicherte Daten verliere.
@benwiggy Ich verwende derzeit einen 27-Zoll-2019-Intel-Imac. Ich denke, alles mit einer GUI würde als "nicht belastend" gelten.
Ich habe auch Schlafprobleme, also glaube ich, dass Sie den guten alten Wecker brauchen, weit weg vom Computer. Ich habe zwei Schlüsselmomente, einen, um meine Medizin zu nehmen, und einen, um vor Mitternacht 5 Minuten Duolingo zu lernen (sonst verliere ich meine 750+-Tage-Serie). Danach schaue ich mir also eine 30-minütige Sitcom im Bett auf meinem Handy bei minimaler Helligkeit an, und wenn ich immer noch nicht müde genug bin, tut es eine gute Stand-up-Comedy, weil ich mit geschlossenen Augen zuhören kann.
@Harry, wie unten vorgeschlagen, funktioniert Power Manager mit dem neuesten macOS und wird weiterhin unterstützt. Vermutlich suchen Sie nach einem kostenlosen Ansatz?
@MateusRibeiro Es ist zu einfach, den Wecker zu ignorieren, weil ich ein verdammter Idiot bin.
@Harry lol, ich muss von meinem Stuhl aufstehen, sonst macht mich der Sound verrückt.

Antworten (7)

Ok, im Anschluss an meine vorherige Antwort kann ich Ihnen zeigen, wie Sie Cron (einen integrierten UNIX-Zeitplandienst) dazu bringen, einen geplanten Befehl zum Herunterfahren für Sie auszuführen.

Es wird als root ausgeführt und erzwungen.

  • Terminal öffnen (/Programme/Dienstprogramme/Terminal)
  • Eingangsudo crontab -e

Sie müssen Ihr Login-Passwort eingeben und dann die Eingabetaste drücken.

Sie befinden sich jetzt in einem Texteditor (vim). Geben Sie die folgenden Tastenanschläge sorgfältig ein.

  • Einmal drücken i(damit können Sie Text eingeben)

Angenommen, Sie möchten, dass die Maschine jeden Tag um 2 Uhr morgens heruntergefahren wird, würden wir jetzt eingeben:

* 2 * * * /sbin/shutdown -h now

Wenn Sie möchten, dass die Maschine jeden Tag um 2:30 Uhr heruntergefahren wird, geben Sie Folgendes ein:

30 2 * * * /sbin/shutdown -h now
  • Wenn Sie dies eingegeben haben, drücken Sieesc
  • Drücken Sie dann shift+ z shift+ z(das ist zweimal ein großes "z", um die Änderungen zu schreiben und den Editor zu verlassen)

Sie sollten jetzt zur Befehlszeile zurückkehren, wo Sie begonnen haben.

Du bist fertig!

Muss man sudoda nicht hinstellen? Ich weiß, dass es wahrscheinlich dazu führen wird, dass es auflegt, aber ich bin mir ziemlich sicher, dass Sie root sein müssen, um es auszuführen shutdown.
Keine Ausnahmen nötig, das ist eine erstaunliche Antwort, ziemlich glücklich überrascht, besonders nachdem ich Ihnen unhöflich geantwortet habe. Vielen Dank für Ihre Hilfe
@daveisgeek - Sie haben vollkommen recht, aber beachten Sie, dass wir crontab mit sudo starten. Dies bedeutet, dass wir die crontab von root bearbeiten und daher alle geplanten Befehle darin als dieser Benutzer ausgeführt werden.
Hey, ich habe dies getan, und zur festgelegten Zeit erhielt ich einen Dialog, der besagt, dass dieser Computer in 10 Minuten heruntergefahren wird? Und es fordert mich auf zu kündigen. Ich weiß nicht, ob das das Ergebnis der Cron-Sache war oder der Energiespar-Sache, die ich auch gemacht habe. Soll das Cron-Ding ein Herunterfahren ohne Abbruchdialog erzwingen?
Sie sollten keinen Dialog erhalten. Deaktivieren Sie den Zeitplan in den Energiespareinstellungen, da wird wahrscheinlich die Meldung angezeigt. Dann heißt es nur noch warten, bis der Cron heruntergefahren ist :)
So sieht mein Crontab-Ding aus: cl.ly/363p2J3M3F2x0q042x1c Das ist 22:30 Uhr? Es ging einfach vorbei und nichts passierte.
shutdownin /sbindem steht wohl nicht im default $PATH von cron. Um das Problem zu beheben, wiederholen Sie die sudo crontab -eSache, geben Sie ein dd, um die Zeile zu löschen (vorausgesetzt, die Datei sieht so aus, wie die, die Sie oben verlinkt haben) und geben Sie die Zeile erneut als ein 30 22 * * * /sbin/shutdown -h now.
@patrix Top Mann, ich habe das /sbin/ verpasst! Das funktioniert jetzt :)
Wie kündige ich diese Crontab?
Ja, wie macht man das rückgängig, wenn man das nicht mehr will?
@Johnykutty und @user3314418: Bearbeiten Sie die Cron-Datei ( sudo crontab -e) und löschen Sie die hinzugefügte Shutdown-Zeile, dann speichern Sie.
Funktioniert diese Antwort auch, wenn die Maschine schläft?
10 Jahre später... DIESE ANTWORT FUNKTIONIERT NICHT MEHR! Es wird jetzt automatisch neu gestartet, anstatt sauber herunterzufahren.
@Harry Kommentare sind hier nicht dauerhaft und können verschwinden. Ihre Beobachtung ist nützlich. Um sie beizubehalten, posten Sie die Funktioniert-Info in einer neuen Antwort.
@Harry Was hat sich geändert? Angenommen, Ihre Hardware oder Ihr Betriebssystem haben sich seit der ursprünglichen Antwort geändert, können Sie weitere Details zur Betriebssystemversion usw. mitteilen? (Dies funktioniert immer noch für mich auf x86 MBP mit macOS 12.3)

Es kann jedoch gekündigt werden:


Halt bei yymmddhhmm:

shutdown -h 1109211555

Halt in 4 Minuten:

shutdown -h +4

/Library/LaunchAgents/me.lri.forceshutdown.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>me.lri.forceshutdown</string>
    <key>ProgramArguments</key>
    <array>
        <string>shutdown</string>
        <string>-h</string>
        <string>now</string>

    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>23</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

Wenn die Plist einem normalen Benutzer gehörte, würde der Versuch, sie zu laden, zu folgendem Fehler führen launchctl: Dubious ownership on file (skipping):

sudo chown root /Library/LaunchAgents/me.lri.forceshutdown.plist

Der Agent kann geladen werden, indem Sie sich abmelden und wieder anmelden oder mit:

sudo launchctl load /Library/LaunchAgents/me.lri.forceshutdown.plist

sudo crontab -e

`08 16 * * * /sbin/shutdown -h now`

Dies würde ein normales, nicht erzwungenes Herunterfahren durchführen:

osascript -e 'tell app "System Events" to shut down'
Beim Hinzufügen des Shutdown-Befehls zu einem launchd-Agenten in /Library/LaunchAgents/ funktionierte es nicht und 'console' protokollierte 'shutdown: NOT super-user'. Vielleicht hätte dies in /System/Library/LaunchAgents funktioniert (aber Sie sollten dort keine Sachen ablegen :-)) Ich brauchte nur ein normales Herunterfahren, also ging ich mit dem Osascript und legte es in ~/Library/LaunchAgents ab /bla.shutdown.plist. Hat gut funktioniert.
Ich musste jedoch <code>osascript -e 'tell app "Finder" to shutdown'</code> verwenden
Dies ist die einzig richtige Antwort. (Meiner Meinung nach)

Dies kann in Systemeinstellungen > Energiesparmodus > Zeitplan geplant werden . Ich bin mir nicht sicher, ob dies zu einer erzwungenen Abschaltung führt, Sie müssten es ausprobieren. Aber das ist eine eingebaute Option, um das geplante Herunter- und Hochfahren zu automatisieren.

  • Sie können das System auch mit einem Terminalbefehl zwangsweise herunterfahren (erfordert root):

    herunterfahren -h jetzt

    Sie könnten diesen Befehl in eine geplante Aufgabe von launchd oder cron einfügen. In diesem Artikel finden Sie weitere Informationen zu diesen beiden Diensten.

  • Vielleicht möchten Sie auch eine Anwendung wie das treffend benannte iWannaSleep ausprobieren (nicht sicher, ob dies das Herunterfahren erzwingt ).

Was...??? Ich suche eine Anwendung.
Vielleicht möchten Sie weniger undankbar erscheinen, aber wenn Sie meine Antwort noch einmal lesen, werden Sie sehen, dass ich eine App empfehle, und wenn Sie ein wenig unabhängig recherchieren, werden Sie feststellen, dass es tatsächlich ein paar weitere Anwendungen gibt, die diese Fähigkeit haben!
iWannaSleep ist das erste Ergebnis, das Leute auf Google empfehlen, und es macht nicht das, was ich will. Und Sie empfehlen mir, etwas Unix-Ding zu lernen, um den Computer herunterzufahren?
Nein, ich bin dankbar für Ihre Hilfe, es ist nur so, dass Ihre Hilfe völlig verwirrend ist.
Ich empfehle es, weil es eine effektive Möglichkeit ist, mit integrierten Tools das zu erreichen, was Sie wollen. Wenn Sie keine Anwendung finden, die Ihren Anforderungen entspricht, müssen Sie möglicherweise nach etwas suchen, das meinem Vorschlag entspricht.
Energy Saver » Schedule ist keine gute Antwort, da der Benutzer 10 Minuten vor dem Herunterfahren aufgefordert wird, den Vorgang abzubrechen.

Sie können shutdowndirekt verwenden, um einen Shutdown zu einem beliebigen Zeitpunkt in der Zukunft zu planen:

shutdown -h time

wobei time eine zukünftige Zeit in einem von zwei Formaten angibt: +Zahl oder yymmddhhmm, wobei für Jahr, Monat und Tag standardmäßig die aktuellen Systemwerte verwendet werden können. Die erste Form bringt das System in Minuten herunter und die zweite zur angegebenen absoluten Zeit.

Schönere geplante Abschaltung

Wenn Sie Ihren Mac zu einem geplanten Zeitpunkt sicher herunterfahren möchten , ziehen Sie Power Manager in Betracht ; es fährt gut herunter, ohne dass Anwendungen den Prozess blockieren:

  • Alle aktiven Benutzer werden umfassend benachrichtigt.
  • Kurz vor Beginn der Abschaltung wird eine große Warnung angezeigt.
  • Laufende Anwendungen werden freundlich zum Beenden aufgefordert.
  • Anwendungen, die die nette Anfrage ignorieren, werden entschiedener beendet.
  • Das Abmelden bleibt abzuschließen, bevor der Mac endgültig heruntergefahren wird.

Es ist sehr schwierig für eine bösartige Anwendung oder einen bösartigen Prozess, diese Schritte zu blockieren.

Warum nichtshutdown

Die Verwendung shutdownerzwingt das Beenden aller Prozesse auf Ihrem Mac, einschließlich grafischer Anwendungen. Für viele Anwendungen ist dies ein aggressives Verhalten und bietet der Anwendung nicht viel Gelegenheit, Zustand oder Daten zu speichern.

Zeitplan-Assistent

Power Manager enthält eine Aufgabe des Zeitplanassistenten zum Herunterfahren nach einem Zeitplan .

Power Manager - Tägliche Aufgabe ausschalten

Offenlegung: Ich arbeite mit dem Unternehmen zusammen, das Power Manager herstellt.

cd ~/Downloads/

curl --remote-name http://dl.dropbox.com/u/18414/ase/com.tjluoma.forceshutdown.plist

# siehe Anmerkung unten

sudo mv com.tjluoma.forceshutdown.plist /Library/LaunchAgents

sudo chown root:wheel /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

sudo launchctl load /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

Notiz:

Wie bereits geschrieben, bewirkt die plist, dass der Computer jeden Tag um 23:00 Uhr (Ortszeit) heruntergefahren wird.

Wenn Sie die Zeit ändern möchten, bearbeiten Sie das Skript in einem beliebigen Texteditor. Ändern Sie die Stunden- und Minutentasten, hier auszugsweise:

<dict>
    <key>Hour</key>
    <integer>23</integer>
    <key>Minute</key>
    <integer>0</integer>
</dict>

(beachten Sie die Verwendung der 24-Stunden-Zeit)

Ich würde einen Blick auf diese Tech Note von Apple werfen

Sie können SendAppleEventToSystemProcess(kAEShutDown) verwenden, dann können Sie den Befehl killall -u Benutzername verwenden, um alle Apps zu beenden (da Sie nicht möchten, dass es abgebrochen werden kann). Vielleicht möchten Sie auch die Timer-Klasse überprüfen: developer.apple.com/library/ mac/#documentation/Cocoa/Referenz/…
Toller Artikel, aber OP hat sich geweigert, cron oder launchd zu verwenden, ich bezweifle, dass er versucht, seine eigene Lösung für dieses Problem zu codieren.
Während dies die Frage theoretisch beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.