He estado jugando con AppleScript y Automator para que esto funcione, pero parece que no puedo entenderlo. Si alguien pudiera mostrarme un ejemplo o darme algunos consejos sobre cómo puedo configurar una aplicación para que se cierre en un momento específico y luego poner la computadora en suspensión o apagarla, sería muy apreciado.
Supongo que le gustaría iniciar este procedimiento en lugar de ejecutarlo a una hora programada regularmente.
Mi enfoque sería iniciar esto desde la línea de comando, pero cualquier comando se puede ejecutar en un componente de script de shell de un script de Automator con alguna modificación. El siguiente enfoque combina algunos componentes para hacer el trabajo:
tell
comando para salir de la aplicación.1. Indicar a la aplicación que se cierre
Esto puede ser tan simple como:
osascript -e 'tell application "AppName" to quit'
2. Poner la computadora a dormir
Eche un vistazo pmset
para obtener más detalles, pero emitir el siguiente comando pondrá su computadora en modo de suspensión:
pmset sleepnow
3. Programar una operación para que se ejecute en un momento específico
Echa un vistazo al comando at . Este comando le brinda la capacidad de especificar una hora para que se ejecute un comando. Deberá habilitar esta funcionalidad, ya que no está predeterminada. Para habilitar el atrun
demonio, ejecute el siguiente comando [referencia en SU] :
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
Una vez que haya habilitado atrun
, cualquier comando puede programarse para una hora específica emitiendo
echo "<command>" | at HH:MM
que funciona porque at
toma su entrada de stdin
forma predeterminada. Un enfoque más simple es ejecutar los comandos enumerados en un archivo. Un archivo se puede ejecutar usando la -f
bandera, seguida del nombre del script que se ejecutará de esta manera:
at -f /path/to/file HH:MM
Poniendolo todo junto
Lo que sigue asume que atrun
está habilitado. Como ejemplo de juguete, digamos que quiero salir de Mail y poner la computadora en modo de suspensión a las 11 p. m. Crearía un archivo que contenga los comandos que quiero ejecutar de la siguiente manera:
osascript -e 'tell application "Mail" to quit'
pmset sleepnow
Guarde ese archivo quit-and-sleep
y luego ejecútelo en la línea de comando
at -f /path/to/quit-and-sleep 23:00
Advertencias
No hice ninguna verificación para asegurarme de que Mail realmente se cerró. La secuencia de comandos también asume que nada más se interpondrá en el modo de poner la computadora en modo de suspensión. Lo he mantenido simple aquí como un punto de partida para lo que quieres.
Puede programar un evento una vez con en:
at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'
O para programarlo para que se repita todos los días, edite el crontab con EDITOR=nano crontab -e
y agregue una entrada como esta:
59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
Aquí hay una versión estrictamente de applescript que logra esto dado un valor de tiempo codificado. Por supuesto, podría hacer que esta parte sea interactiva si lo desea. Además, esta versión asume que la cadena de tiempo se relaciona con el día de hoy.
--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)
repeat while (current date) < targetTime
beep
delay 30 -- check the time every 30 seconds
end repeat
tell application "Mail"
quit
end tell
tell application "Finder"
display dialog "Do you want to shut the computer down now?"
if button returned of the result is "Ok" then
shutdown
end if
end tell
Aquí hay un código que esperará una cantidad de segundos antes de salir de la aplicación actual e irse a dormir.
delay (your amount of seconds here)
tell application "System Events"
key down {command}
keystroke "q"
key up {command}
set volume "1"
say "computer going to sleep"
tell application "Finder"
sleep
end tell
end tell
herrero
herrero
Tomas Richardson
herrero
at
no es lo que desea.cron
olaunchd
. Si desea una interfaz más fácil para configurar eso, tal vez lingon 3 lo ayude.