Come posso spegnere forzatamente il mio Mac in un momento prestabilito?


17

Sto cercando un'app di spegnimento automatico che spenga il computer in un momento prestabilito.

La parte più importante di questo è che lo spegnimento non dovrebbe essere cancellabile (a meno che il processo non sia estremamente oneroso).


Cosa intendi con "app"? Deve essere un programma GUI o è launchd (che suggerisco di seguito) accettabile? Se fai cosa è un'app GUI, cosa vuoi che faccia? Chiedi il tempo in cui il computer dovrebbe essere spento, quando è in esecuzione?
TJ Luoma

Risposte:


23

Ok, così oltre alla mia risposta precedente, posso guidarvi a ottenere cron (un servizio di pianificazione UNIX incorporato) per eseguire un comando di spegnimento programmato per voi.

Verrà eseguito come root e sarà forzato.

  • Terminale aperto (/ Applicazioni / Utility / Terminale)
  • Ingresso sudo crontab -e

Dovrai inserire la tua password di accesso e quindi premere Invio.

Ora sarai in un editor di testo (vim). Inserire attentamente le seguenti sequenze di tasti.

  • stampa io una volta (questo ti permetterà di inserire del testo)

Diciamo che vuoi che la macchina si spenga alle 2 del mattino ogni giorno, ora inseriremo:

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

Se si desidera che la macchina si spenga alle 02:30 tutti i giorni, immettere:

30 2 * * * /sbin/shutdown -h now
  • Quando hai digitato questo, premi Esc
  • Quindi premere cambio + z cambio + z (che è maiuscolo "z" due volte, per scrivere le modifiche e uscire dall'editor)

Ora dovresti tornare alla riga di comando da cui hai iniziato.

Hai finito!


Non hai bisogno di mettere sudo Là? So che probabilmente causerà il blocco, ma sono abbastanza sicuro che devi essere root per funzionare shutdown.
daviesgeek

Non sono necessarie eccezioni, questa è una risposta sorprendente, abbastanza felicemente sorpresa, specialmente dopo che ho risposto al tuo sgarbato. Grazie mille per il tuo aiuto
Harry

3
@daveisgeek - Hai perfettamente ragione, ma nota che iniziamo con crontab con sudo. Ciò significa che stiamo modificando il comando crontab di root e quindi qualsiasi comando programmato all'interno verrà eseguito come tale utente.
macaco

Ehi, l'ho fatto, e all'ora stabilita ho avuto una finestra di dialogo che dice che questo computer si spegnerà tra 10 minuti? E mi chiede di cancellare. Non so se questo sia stato il risultato della cron, o della cosa che ho risparmiato energia. La cosa del cron dovrebbe forzare uno spegnimento senza una finestra di dialogo di annullamento?
Harry

3
shutdown è in /sbin che probabilmente non è nel predefinito $ PATH di cron. Per risolvere, fare il sudo crontab -e cosa ancora, scrivi dd per cancellare la linea (assumendo che il file assomigli a quello che hai linkato sopra) e reinserire la linea come 30 22 * * * /sbin/shutdown -h now.
nohillside

13

Può essere cancellato però:


Fermati a yymmddhhmm:

shutdown -h 1109211555

Fermati in 4 minuti:

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>

Se il plist era di proprietà di un utente normale, provare a caricarlo comporterebbe l'errore launchctl: Dubious ownership on file (skipping):

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

L'agente può essere caricato disconnettendosi e tornando indietro, oppure con:

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

sudo crontab -e

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

Questo eseguiva un normale spegnimento non forzato:

osascript -e 'tell app "System Events" to shut down'

Quando si aggiunge il comando shutdown a un agent launchd in / Library / LaunchAgents /, non funzionava e 'console' registrava 'shutdown: NOT super-user'. Forse questo avrebbe funzionato in / System / Library / LaunchAgents (ma non dovresti mettere le cose lì :-)) Avevo solo bisogno di un normale shutdown, quindi sono andato con l'osascript, e lo metto in ~ / Library / LaunchAgents /bla.shutdown.plist. Ha funzionato bene
commonpike

Ho dovuto usare & lt; code & gt; osascript -e 'dire all'app "Finder" per spegnere' & lt; / code & gt; anche se
commonpike

Questa è l'unica risposta corretta. (secondo me)
CousinCocaine

9

Questo può essere programmato in Preferenze di sistema & gt; Risparmio energetico & gt; Programma . Non sono sicuro che questo avvierà un arresto forzato, dovresti provarlo. Ma questa è un'opzione integrata per automatizzare il down / up programmato.

  • È anche possibile chiudere forzatamente il sistema con un comando di terminale (richiede root):

    shutdown -h ora

    Potresti inserire questo comando in a launchd o cron operazione programmata. Check-out Questo articolo per molte più informazioni su questi due servizi.

  • Si consiglia inoltre di controllare un'applicazione come il nome corretto voglio dormire (non sono sicuro se questo forze spegnimento).


Che cosa...??? Sto cercando un'app.
Harry

2
Potresti voler apparire meno ingrato, ma se rileggi la mia risposta vedrai che raccomando un'app e se fai una piccola ricerca indipendente vedrai che in realtà ci sono altre applicazioni che hanno questa capacità!
macaco

iWannaSleep è il primo risultato che le persone raccomandano su google e non fa quello che voglio. E mi stai raccomandando di imparare qualcosa di unix per spegnere il computer?
Harry

2
Lo consiglio perché è un modo efficace per ottenere ciò che vuoi usando gli strumenti integrati. Se non riesci a trovare un'applicazione adatta alle tue esigenze, potrebbe essere necessario guardare a qualcosa sulla falsariga del mio suggerimento.
macaco

1
Risparmio energetico »Il programma è non una buona risposta, perché richiederà all'utente 10 minuti prima dello spegnimento e offre di annullare il processo.
TJ Luoma

3

Puoi usare shutdown direttamente per pianificare un arresto in un dato momento in futuro:

shutdown -h time

dove time specifica un orario futuro in uno dei due formati:              + numero o yymmddhhmm, dove l'anno, il mese e il giorno possono essere impostati come valori predefiniti              valori di sistema. Il primo modulo riporta il sistema in pochi minuti e il secondo              al tempo assoluto specificato.


2
cd ~/Downloads/

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

# vedi nota sotto

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

Nota:

Come scritto, il plist farà spegnere il computer alle 23:00 (ora locale) ogni giorno.

Se si desidera modificare l'ora, modificare lo script in qualsiasi editor di testo. Cambia i tasti Ora e Minuti, estratti qui:

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

(notare l'uso di 24 ore)


2

Nicer Scheduled Shut Down

Se lo desidera spegnere in sicurezza il tuo Mac a un orario programmato, prendi in considerazione Power Manager ; si chiude bene senza lasciare che le applicazioni blocchino il processo:

  • A tutti gli utenti attivi viene data ampia notifica.
  • Un grande avvertimento viene visualizzato poco prima dell'inizio dello spegnimento.
  • Le applicazioni in esecuzione vengono chieste gentilmente di uscire.
  • Le applicazioni che ignorano la bella richiesta vengono abbandonate più fermamente.
  • La disconnessione è terminata per completare, prima che il Mac venga definitivamente chiuso.

È molto difficile per un'applicazione o un processo non autorizzato bloccare questi passaggi.

Perchè no shutdown

utilizzando shutdown forzerà l'uscita da tutti i processi sul tuo Mac, incluse le applicazioni grafiche. Per molte applicazioni questo è un comportamento aggressivo e non fornisce all'applicazione molte opportunità di salvare lo stato o i dati.

Schedule Assistant

Power Manager include un task Schedule Assistant per chiudendo a un programma .

Power Manager - power off daily task

Divulgazione: collaboro con la società che produce Power Manager.


0

Darei un'occhiata a questo nota tecnica di Apple


Grazie, cosa faccio adesso?
Harry

puoi usare SendAppleEventToSystemProcess (kAEShutDown), quindi puoi usare il comando killall -u username per uccidere tutte le app (dato che non vuoi che sia cancellabile) potresti anche voler controllare la classe del timer: developer.apple.com/library/mac/#documentation/Cocoa/Reference/...
Samantha Catania

1
Grande articolo, ma OP stava cercando di usare cron o launchd, dubito che stia cercando di codificare la propria soluzione a questo problema.
macaco

1
Mentre questo può teoricamente rispondere alla domanda, sarebbe preferibile per includere qui le parti essenziali della risposta e fornire il link per riferimento.
daviesgeek
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.