¿Cómo puedo apagar mi Mac a la fuerza en un momento designado?

Estoy buscando una aplicación de apagado automático que apague la computadora a la fuerza en un momento designado.

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

¿Qué quieres decir con "aplicación"? ¿Tiene que ser un programa GUI o es aceptable launchd (lo que sugiero a continuación)? Si haces una aplicación GUI, ¿qué quieres que haga? Solicitar la hora en que la computadora debe apagarse, ¿cuándo se ejecuta?
¿Puedes explicar un poco más sobre el escenario? ¿Qué modelo de Mac y OS? ¿Por qué es importante el apagado? ¿Cómo se define una tarea 'onerosa'? ¿Está de acuerdo con perder los datos no guardados o desea intentar guardar y salir de todas las aplicaciones?
@benwiggy Solo es cuestión de asegurarse de tener un horario de sueño decente. A veces estoy "en medio de algo" o tengo que "ver un video importante de YouTube". Pero esas excusas en realidad nunca son lo suficientemente buenas como para retrasar la hora de acostarse. Sin embargo, si el apagado automático es algo que se puede apagar, estoy tentado de ir y apagarlo. Quiero evitar esa tentación. Estoy bien con la pérdida de datos no guardados.
@benwiggy Actualmente estoy usando un imac Intel 2019 de 27 pulgadas. Creo que cualquier cosa con una GUI contaría como "no onerosa".
También tengo problemas para dormir, así que creo que necesitas el viejo despertador, lejos de la computadora. Tengo dos momentos clave, uno para tomar mi medicamento y otro para estudiar 5 minutos de Duolingo antes de la medianoche (o perderé mi racha de más de 750 días). Entonces, después de eso, miro una comedia de situación de 30 minutos en la cama en mi teléfono con brillo mínimo, y si todavía no tengo suficiente sueño, una buena comedia de stand-up será suficiente porque puedo escuchar con los ojos cerrados.
@Harry, como se sugiere a continuación, Power Manager funciona con la última versión de macOS y sigue siendo compatible. ¿Presumiblemente estás buscando un enfoque gratuito?
@MateusRibeiro es demasiado fácil ignorar el despertador porque soy un maldito imbécil.
@Harry lol, tengo que levantarme de la silla o el sonido me volverá loco.

Respuestas (7)

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

Se ejecutará como root y será forzado.

  • Abrir Terminal (/Aplicaciones/Utilidades/Terminal)
  • Aportesudo crontab -e

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

Ahora estarás en un editor de texto (vim). Introduzca con cuidado 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 ingresaríamos:

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

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

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

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

¡Ya terminaste!

¿No necesitas ponerlo sudoahí? Sé que eso probablemente hará que se cuelgue, pero estoy bastante seguro de que tienes que ser root para ejecutarlo shutdown.
No se necesitan excepciones, esa es una respuesta increíble, muy felizmente sorprendida, especialmente después de que te respondí de manera grosera. Muchas gracias por su ayuda
@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.
Oye, hice esto y, a la hora acordada, recibí un cuadro de diálogo que dice: ¿Esta computadora se apagará en 10 minutos? Y me pide cancelar. No sé si eso fue el resultado de lo de cron, o lo de ahorro de energía que también hice. ¿Se supone que cron debe forzar un apagado sin un cuadro de diálogo de cancelación?
No deberías estar recibiendo un diálogo. Apague el horario en las preferencias de ahorro de energía, eso probablemente esté mostrando el mensaje. Entonces es solo un caso de esperar hasta el tiempo de apagado de cron :)
Así es como se ve mi crontab: cl.ly/363p2J3M3F2x0q042x1c ¿Son las 10:30 p. m.? Simplemente pasó y no pasó nada.
shutdownes en /sbinel que probablemente no esté en el $PATH predeterminado de cron. Para solucionarlo, sudo crontab -evuelva a hacer lo mismo, escriba ddpara eliminar la línea (suponiendo que el archivo se parece al que vinculó anteriormente) y vuelva a ingresar la línea como 30 22 * * * /sbin/shutdown -h now.
@patrix Top man, ¡me perdí el /sbin/! Esto funciona ahora :)
¿Cómo cancelar este crontab?
sí, ¿cómo reviertes esto si ya no quieres hacer esto?
@Johnykutty y @user3314418: edite el archivo cron ( sudo crontab -e) y elimine la línea de apagado que agregó, luego guarde.
¿Funcionará esta respuesta incluso si la máquina está durmiendo?
10 años después... ¡ESTA RESPUESTA YA NO FUNCIONA! Ahora se reinicia automáticamente en lugar de un apagado limpio.
Los comentarios de @Harry no son persistentes aquí y pueden desaparecer. Tu observación es útil. Para conservarlo, publique la información que no funciona en una nueva Respuesta.
@Harry ¿Qué ha cambiado? Suponiendo que su hardware o sistema operativo hayan cambiado desde la respuesta original, ¿puede compartir más detalles sobre la versión del sistema operativo, etc.? (Esto todavía funciona para mí en x86 MBP con macOS 12.3)

Aunque se puede cancelar:


Deténgase 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 fuera propiedad de un usuario normal, intentar cargarlo daría como resultado el error launchctl: Dubious ownership on file (skipping):

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

El agente se puede cargar cerrando y volviendo a iniciar sesión, 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'
Al agregar el comando de apagado a un agente de lanzamiento en /Library/LaunchAgents/, no funcionó y la 'consola' registraría 'apagado: NO superusuario'. 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 opté por el osascript y lo puse en ~/Library/LaunchAgents /bla.shutdown.plist. Funcionó bien.
Sin embargo, tuve que usar <code>osascript -e 'dile a la aplicación "Finder" que se apague'</code>
Esta es la única respuesta correcta. (en mi opinión)

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

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

    apagar -h ahora

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

  • También es posible que desee consultar una aplicación como iWannaSleep (no estoy seguro de si esto fuerza el cierre).

Qué...??? Estoy buscando una aplicación.
Es posible que desee parecer menos desagradecido, pero si vuelve a leer mi respuesta, verá que recomiendo una aplicación y, si realiza una pequeña investigación independiente, verá que en realidad hay algunas aplicaciones más que tienen esta capacidad.
iWannaSleep es el primer resultado que la gente recomienda en Google y no hace lo que yo quiero. ¿Y me recomiendas que aprenda algo de Unix para apagar la computadora?
No, estoy agradecido por su ayuda, es solo que su ayuda es completamente desconcertante.
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.
Ahorro de energía » Programar no es una buena respuesta, porque avisará al usuario 10 minutos antes del apagado y le ofrecerá cancelar el proceso.

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

shutdown -h time

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

Cierre 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 amplia notificación.
  • Se muestra una gran advertencia poco antes de que comience el apagado.
  • Se pide amablemente a las aplicaciones en ejecución que se cierren.
  • Las aplicaciones que ignoran la buena solicitud se cierran con más firmeza.
  • El cierre de sesión se deja para completar, antes de que la Mac finalmente se apague.

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

Por qué noshutdown

El uso shutdownforzará el cierre de 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 el estado o los datos.

Asistente de programación

Power Manager incluye una tarea del asistente de programación para cerrar según una programación .

Power Manager - tarea diaria de apagado

Divulgación: trabajo con la empresa que fabrica Power Manager.

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, el plist 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)

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

puede usar SendAppleEventToSystemProcess (kAEShutDown) y luego puede usar el comando killall -u nombre de usuario para eliminar todas las aplicaciones (ya que no quiere que se pueda cancelar) también puede consultar la clase de temporizador: desarrollador.apple.com/library/ mac/#documentación/Cocoa/Referencia/…
Gran artículo, pero OP se resistía a usar cron o launchd, dudo que esté buscando codificar su propia solución a este problema.
Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia.