¿Cómo puedo apagar por la fuerza mi Mac a una hora determinada?

19

Estoy buscando una aplicación de apagado automático que apague forzosamente la computadora a una hora determinada.

La parte más importante de esto es que el cierre no debe ser cancelable (a menos que el proceso sea extremadamente oneroso).

Harry
fuente
¿Qué quieres decir con "aplicación"? ¿Tiene que ser un programa GUI o se lanza (que sugiero a continuación) aceptable? Si haces lo que una aplicación GUI, ¿qué quieres que haga? ¿Preguntar por el momento en que la computadora debe apagarse cuando se ejecuta?
TJ Luoma

Respuestas:

25

Ok, más allá de mi respuesta anterior, puedo guiarlo a través de cómo obtener cron (un servicio de programación UNIX incorporado) para ejecutar un comando de apagado programado para usted.

Se ejecutará como root y será forzado.

  • Terminal abierto (/ Aplicaciones / Utilidades / Terminal)
  • Entrada sudo crontab -e

Deberá ingresar su contraseña de inicio de sesión y luego presionar enter.

Ahora estará en un editor de texto (vim). Ingrese cuidadosamente las siguientes pulsaciones de teclas.

  • Presione iuna vez (esto le permitirá ingresar texto)

Digamos que desea que la máquina se apague a las 2 am todos los días, ahora ingresaremos:

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

Si desea que la máquina se apague a las 2:30 am todos los días, debe ingresar:

30 2 * * * /sbin/shutdown -h now
  • Cuando hayas escrito esto, presiona esc
  • Luego presione shift+ z shift+ z(eso es mayúscula "z" dos veces, para escribir los cambios y salir del editor)

Ahora debería volver a la línea de comando donde comenzó.

Ya terminaste!

macaco
fuente
¿No necesitas poner sudoahí? Sé que probablemente hará que se cuelgue, pero estoy bastante seguro de que tienes que ser root para ejecutarlo shutdown.
daviesgeek
No se necesitan excepciones, esa es una respuesta asombrosa, felizmente sorprendida, especialmente después de que respondí groseramente. Muchas gracias por su ayuda
Harry
3
@daveisgeek: tiene toda la razón, pero tenga en cuenta que iniciamos crontab con sudo. Esto significa que estamos editando el crontab de root y, por lo tanto, cualquier comando programado dentro se ejecutará como ese usuario.
macaco
Oye, hice esto, y en el momento señalado recibí un cuadro de diálogo que dice: ¿esta computadora se apagará en 10 minutos? Y me pide que cancele. No sé si eso fue el resultado del asunto del cron, o el ahorro de energía que también hice. ¿Se supone que la cosa cron forzará un apagado sin un diálogo de cancelación?
Harry
3
shutdownes en el /sbinque probablemente no está en el valor predeterminado $ PATH de cron. Para solucionarlo, sudo crontab -evuelva a hacerlo , escriba ddpara eliminar la línea (suponiendo que el archivo se parezca al que ha vinculado anteriormente) y vuelva a ingresar la línea como 30 22 * * * /sbin/shutdown -h now.
nohillside
13

Sin embargo, se puede cancelar:


Detenerse en yymmddhhmm:

shutdown -h 1109211555

Detener en 4 minutos:

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>

Si el plist era propiedad de un usuario normal, intentar cargarlo provocaría el error launchctl: Dubious ownership on file (skipping):

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

El agente se puede cargar al cerrar sesión y volver a iniciarla, o con:

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

sudo crontab -e

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

Esto realizaría un apagado normal no forzado:

osascript -e 'tell app "System Events" to shut down'
Lri
fuente
Al agregar el comando de apagado a un agente de launchd en / Library / LaunchAgents /, no funcionó y 'console' registraría 'shutdown: NOT super-user'. Tal vez esto hubiera funcionado en / System / Library / LaunchAgents (pero se supone que no debes poner cosas allí :-)) Solo necesitaba un apagado normal, así que fui con el osascript y lo puse en ~ / Library / LaunchAgents /bla.shutdown.plist. Funcionó bien.
commonpike
Sin embargo, tuve que usar <code> osascript -e 'tell app "Finder" para cerrar' </code>
commonpike
Esta es la única respuesta correcta. (en mi opinión)
CousinCocaine
9

Esto se puede programar en Preferencias del sistema> Ahorro de energía> Programar . No estoy seguro de que esto inicie un cierre forzado, tendrías que probarlo. Pero esa es una opción integrada para automatizar el apagado / encendido programado.

  • También puede apagar el sistema por la fuerza con un comando de terminal (requiere root):

    apagado -h ahora

    Puede poner ese comando en una tarea programada de launchd o cron . Consulte este artículo para obtener más información sobre esos dos servicios.

  • También es posible que desee revisar una aplicación como el iWannaSleep acertadamente llamado (no estoy seguro si esto obliga a cerrar).

macaco
fuente
Qué...??? Estoy buscando una aplicación.
Harry
2
Es posible que desee parecer menos desagradecido, pero si vuelve a leer mi respuesta, verá que le recomiendo una aplicación y si hace un poco de investigación independiente, verá que en realidad hay algunas aplicaciones más que tienen esta capacidad.
macaco
iWannaSleep es el primer resultado que la gente recomienda en google, y no hace lo que quiero. ¿Y me estás recomendando que aprenda algo de Unix para apagar la computadora?
Harry
3
Lo recomiendo porque es una forma efectiva de lograr lo que quieres usando herramientas integradas. Si no puede encontrar una aplicación que se adapte a sus necesidades, es posible que deba buscar algo similar a mi sugerencia.
macaco
1
Ahorro de energía »El horario no es una buena respuesta, ya que avisará al usuario 10 minutos antes del apagado y le ofrecerá cancelar el proceso.
TJ Luoma
3

Puede usar shutdowndirectamente para programar un apagado en cualquier momento en el futuro:

shutdown -h time

donde time especifica una hora futura en uno de los dos formatos: + número, o aammddhhmm, donde el año, mes y día pueden estar predeterminados a los valores actuales del sistema. La primera forma baja el sistema en minutos y la segunda en el tiempo absoluto especificado.

nohillside
fuente
2
cd ~/Downloads/

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

# vea la nota abajo

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:

Tal como está escrito, la lista hará que la computadora se apague a las 11 p.m. (hora local) todos los días.

Si desea cambiar la hora, edite el script en cualquier editor de texto. Cambie las teclas de hora y minuto, extraídas aquí:

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

(tenga en cuenta el uso del tiempo de 24 horas)

TJ Luoma
fuente
2

Apagado programado más agradable

Si desea apagar su Mac de manera segura a una hora programada, considere Power Manager ; se cierra muy bien sin permitir que las aplicaciones bloqueen el proceso:

  • Todos los usuarios activos reciben una amplia notificación.
  • Se muestra una gran advertencia poco antes de que comience el apagado.
  • Las aplicaciones en ejecución se les pide que abandonen.
  • Las aplicaciones que ignoran la buena solicitud se cierran más firmemente.
  • El cierre de sesión se deja completar, antes de que la Mac finalmente se apague.

Es muy difícil para una aplicación o proceso no autorizado bloquear estos pasos.

Por qué no shutdown

El uso shutdownforzará a cerrar todos los procesos en su Mac, incluidas las aplicaciones gráficas. Para muchas aplicaciones, este es un comportamiento agresivo y no brinda a la aplicación muchas oportunidades para guardar estado o datos.

Asistente de horario

Power Manager incluye una tarea del Asistente de programación para cerrar una programación .

Power Manager: apaga la tarea diaria

Divulgación: trabajo con la compañía que hace Power Manager.

Graham Miln
fuente
0

Echaría un vistazo a esta nota técnica de Apple

Samantha Catania
fuente
Gracias, ¿qué hago ahora?
Harry
puede usar SendAppleEventToSystemProcess (kAEShutDown), luego puede usar el comando killall -u username para eliminar todas las aplicaciones (ya que no desea que se pueda cancelar) también puede consultar la clase de temporizador: developer.apple.com/library/ mac / # documentation / Cocoa / Reference / ...
Samantha Catania
1
Gran artículo, pero OP se estaba negando a usar cron o launchd, dudo que esté buscando codificar su propia solución a este problema.
macaco
1
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
daviesgeek