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

19

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

Das Wichtigste dabei ist, dass das Herunterfahren nicht abgebrochen werden kann (es sei denn, der Vorgang ist äußerst mühsam).

Harry
quelle
Was meinst du mit "App"? Muss es ein GUI-Programm sein oder ist launchd (was ich unten vorschlage) akzeptabel? Was möchten Sie, wenn Sie eine GUI-App verwenden? Eingabeaufforderung für die Zeit, in der der Computer heruntergefahren werden soll, wenn ausgeführt?
TJ Luoma

Antworten:

25

Ok, also kann ich Sie, abgesehen von meiner vorherigen Antwort, durch cron (einen integrierten UNIX-Zeitplandienst) führen, um einen geplanten Befehl zum Herunterfahren für Sie auszuführen.

Es wird als root ausgeführt und gezwungen.

  • Open Terminal (/ Programme / Dienstprogramme / Terminal)
  • Eingang sudo crontab -e

Sie müssen Ihr Anmeldekennwort eingeben und dann die Eingabetaste drücken.

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

  • Drücken Sie ieinmal (dies ermöglicht es Ihnen , Text eingeben)

Angenommen, Sie möchten, dass die Maschine jeden Tag um 2 Uhr morgens herunterfährt. Wir geben nun Folgendes ein:

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

Wenn Sie möchten, dass die Maschine jeden Tag um 02:30 Uhr herunterfährt, geben Sie Folgendes ein:

30 2 * * * /sbin/shutdown -h now
  • Wenn Sie dies eingegeben haben, drücken Sie esc
  • Dann drücke shift+ z shift+ z(das ist zweimal "z" in Großbuchstaben, um die Änderungen zu schreiben und den Editor zu verlassen)

Sie sollten jetzt zu der Befehlszeile zurückkehren, in der Sie gestartet haben.

Sie sind fertig!

Macaco
quelle
Müssen Sie nicht sudodort setzen ? 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 zu laufen shutdown.
Daviesgeek
Es sind keine Ausnahmen erforderlich, das ist eine erstaunliche Antwort, die ziemlich glücklich überrascht ist, besonders nachdem ich grob auf Sie geantwortet habe. Vielen Dank für Ihre Hilfe
Harry
3
@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 als dieser Benutzer ausgeführt werden.
Macaco
Hey, ich habe das getan und zum festgelegten Zeitpunkt wurde ein Dialogfeld angezeigt, in dem steht, dass der Computer in 10 Minuten heruntergefahren wird. Und es bittet mich abzusagen. Ich weiß nicht, ob das das Ergebnis der Cron-Sache oder der Energiespar-Sache war, die ich auch getan habe. Soll das Cron-Ding ein Herunterfahren ohne Abbruchdialog erzwingen?
Harry
3
shutdownist, in /sbindem ist wahrscheinlich nicht in der Standardeinstellung $ PATH von Cron. Um dies zu beheben, führen Sie die sudo crontab -eSache wieder, geben Sie dddie Zeile (vorausgesetzt , die Datei sieht aus wie die, die Sie oben verlinkten) und reenter die Linie zu löschen 30 22 * * * /sbin/shutdown -h now.
Nohillside
13

Es kann jedoch storniert 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ört, 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 durch Abmelden und erneutes Anmelden oder mit folgendem Befehl geladen werden:

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'
Lri
quelle
Beim Hinzufügen des Befehls shutdown zu einem launchd-Agenten in / Library / LaunchAgents / hat es nicht funktioniert und 'console' hat 'shutdown: NOT super-user' protokolliert. Vielleicht hätte das in / System / Library / LaunchAgents geklappt (aber Sie sollten dort nichts ablegen :-)) Ich brauchte nur ein normales Herunterfahren, also ging ich mit dem Javascript und legte es in ~ / Library / LaunchAgents ab /bla.shutdown.plist. Hat gut funktioniert.
Commonpike
Ich musste allerdings <code> osascript -e 'tell app "Finder" verwenden, um </ code> herunterzufahren
commonpike
Dies ist die einzig richtige Antwort. (meiner Meinung nach)
CousinCocaine
9

Dies kann in den Systemeinstellungen> Energiesparmodus> Zeitplan festgelegt werden . Ich bin mir nicht sicher, ob dies zu einem erzwungenen Herunterfahren führen wird. Sie müssen es ausprobieren. Dies ist jedoch eine integrierte Option zur Automatisierung des geplanten Aus- und Einschaltens.

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

    Herunterfahren -h jetzt

    Sie können diesen Befehl in eine geplante Launchd- oder Cron- Task einfügen . In diesem Artikel finden Sie weitere Informationen zu diesen beiden Diensten.

  • Möglicherweise möchten Sie auch eine Anwendung wie iWannaSleep auschecken (nicht sicher, ob dies das Herunterfahren erzwingt ).

Macaco
quelle
Was...??? Ich suche eine App.
Harry
2
Vielleicht möchten Sie weniger undankbar erscheinen, aber wenn Sie meine Antwort noch einmal lesen, werden Sie feststellen, dass ich eine App empfehle, und wenn Sie ein wenig unabhängige Nachforschungen anstellen, werden Sie feststellen, dass es tatsächlich ein paar weitere Anwendungen gibt, die diese Fähigkeit haben!
Macaco
iWannaSleep ist das erste Ergebnis, das auf Google empfohlen wird, und es macht nicht das, was ich will. Und Sie empfehlen mir, etwas über Unix zu lernen, um den Computer herunterzufahren?
Harry
3
Ich empfehle es, weil es ein effektiver Weg ist, mit eingebauten Werkzeugen das zu erreichen, was Sie wollen. Wenn Sie keine Anwendung finden, die Ihren Anforderungen entspricht, müssen Sie möglicherweise nach meinem Vorschlag suchen.
Macaco
1
Energy Saver »Schedule ist keine gute Antwort, da der Benutzer 10 Minuten vor dem Herunterfahren aufgefordert wird, den Vorgang abzubrechen.
TJ Luoma
3

Sie können shutdowndirekt verwenden, um ein Herunterfahren zu einem bestimmten Zeitpunkt in der Zukunft zu planen:

shutdown -h time

Dabei gibt die Uhrzeit eine zukünftige Uhrzeit in einem von zwei Formaten an: + Zahl oder yymmddhhmm, wobei für Jahr, Monat und Tag möglicherweise die aktuellen Systemwerte voreingestellt sind. Das erste Formular senkt das System in Minuten und das zweite in der angegebenen absoluten Zeit.

nohillside
quelle
2
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

Hinweis:

Wie beschrieben, wird der Computer jeden Tag um 23:00 Uhr (Ortszeit) heruntergefahren.

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

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

(Beachten Sie die Verwendung von 24-Stunden-Zeit)

TJ Luoma
quelle
2

Schöner geplantes Herunterfahren

Wenn Sie Ihren Mac zu einem geplanten Zeitpunkt sicher herunterfahren möchten , ziehen Sie Power Manager in Betracht . Es wird ordnungsgemäß heruntergefahren, ohne dass Anwendungen den Prozess blockieren:

  • Alle aktiven Benutzer werden umfassend benachrichtigt.
  • Kurz vor dem Herunterfahren wird eine große Warnung angezeigt.
  • Laufende Anwendungen werden freundlich gebeten, zu beenden.
  • Anwendungen, die die nette Anfrage ignorieren, werden fester beendet.
  • Das Abmelden muss erst abgeschlossen werden, bevor der Mac endgültig heruntergefahren wird.

Es ist für eine betrügerische Anwendung oder einen betrügerischen Prozess sehr schwierig, diese Schritte zu blockieren.

Warum nicht shutdown

Durch shutdowndie Verwendung von werden alle Prozesse auf Ihrem Mac beendet, einschließlich grafischer Anwendungen. Für viele Anwendungen ist dies ein aggressives Verhalten und bietet der Anwendung nicht die Möglichkeit, Status oder Daten zu speichern.

Planungsassistent

Power Manager enthält einen Schedule Assistant-Task zum Herunterfahren eines Zeitplans .

Power Manager - Tägliche Aufgabe ausschalten

Offenlegung: Ich arbeite mit der Firma, die Power Manager herstellt.

Graham Miln
quelle
0

Ich würde mir diese technische Notiz von Apple ansehen

Samantha Catania
quelle
Danke, was mache ich jetzt?
Harry
Sie können SendAppleEventToSystemProcess (kAEShutDown) verwenden und dann den Befehl killall -u username verwenden, um alle Apps zu beenden (da Sie nicht möchten, dass sie storniert werden können). Vielleicht möchten Sie auch die Timer-Klasse überprüfen: developer.apple.com/library/ mac / # documentation / Cocoa / Reference /…
Samantha Catania
1
Großartiger Artikel, aber OP wollte nicht Cron oder Launchd verwenden. Ich bezweifle, dass er versucht, seine eigene Lösung für dieses Problem zu programmieren.
Macaco
1
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Daviesgeek