Ejecute una secuencia de commands antes de cerrar

Quiero ejecutar un script cada vez que apago mi computadora. Sé que esto es quizás un duplicado y realmente leí muchos hilos similares, pero o la respuesta ya no funciona o no veo cómo funciona la respuesta.

Ya descubrí que Apple quiere que use launchd . La mayoría de las otras soluciones ya no funcionan.

Así que encontré esta respuesta, pero por lo que veo, launchd hace todo cuando el sistema comienza. Copiaré el código a continuación

 <?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>boot.shutdown.script.name</string> <key>ProgramArguments</key> <array> <string>SCRIPT_PATH/boot-shutdown.sh</string> </array> <key>RunAtLoad</key> <true/> <key>StandardOutPath</key> <string>LOG_PATH/boot-shutdown.log</string> <key>StandardErrorPath</key> <string>LOG_PATH/boot-shutdown.err</string> </dict> </plist> 

y el guion

 #!/bin/bash function shutdown() { # INSERT HERE THE COMMAND YOU WANT EXECUTE AT SHUTDOWN OR SERVICE UNLOAD exit 0 } function startup() { # INSERT HERE THE COMMAND YOU WANT EXECUTE AT STARTUP OR SERVICE LOAD tail -f /dev/null & wait $! } trap shutdown SIGTERM trap shutdown SIGKILL startup; 

Lamentablemente, no hay ningún tutorial para el launchd que incluya una explicación muy básica. Entonces, por ejemplo, los arguments de los corchetes key son algo más que simples cadenas, desencadenan algo, pero no puedo encontrar una list de qué palabras disparan qué acción.

Me gustaría entender la idea básica de launchd . Especialmente, cuáles son los commands para ejecutar un script cuando los sistemas se inician y cuando el sistema se apaga.

2 Solutions collect form web for “Ejecute una secuencia de commands antes de cerrar”

Creo que abordaría esto de manera diferente a lo que estás haciendo, pero una vez más mi sugerencia es un poco de una solución en comparación con lo que quieres.

Mi enfoque sería configurar el script para que active el cierre como parte de su código. En otras palabras, en lugar de hacer que Shutdown active la secuencia de commands, haga que la secuencia de commands active el apagado.

La ventaja de esto es que puede usar esto como su opción de apagado habitual si lo desea, pero si alguna vez necesita apagarlo sin ejecutar también su script, puede hacerlo (por ejemplo, si tiene que cerrar varias veces para solucionar problemas, o si una installation apaga automáticamente su Mac, etc.).

Si esta es una opción aceptable para usted, entonces el código de Applescript que necesita es el siguiente:

 tell application "Finder" to shut down 

En otras palabras, efectivamente debe agregar el código anterior a cualquier script que sea.

Una vez que el script funcione como lo desee, crearía un Servicio Automator que lo ejecute. Esto no es obligatorio, pero sí significa que podrá ejecutar su secuencia de commands desde el menu Aplicación de cualquier aplicación. Y, también significa que puede crear un atajo de keyboard para activarlo.

Si alguna o ambas de estas opciones le interesan, proceda a continuación.

1. Crea un service usando Automator

  1. Inicie Automator (generalmente se encuentra dentro de su carpeta de Aplicaciones)
  2. Ve a Archivo> Nuevo
  3. Seleccione Servicio y click Elegir
  4. En la esquina superior derecha de la window que aparece, asegúrese de seleccionar "Sin input" en la list desplegable de Recepción de services.
  5. Asegúrese de que la list desplegable En muestre "Cualquier aplicación"
  6. En la segunda columna que contiene la list larga, busque "Ejecutar AppleScript" y haga doble clic en él
  7. Esto agregará la window Ejecutar AppleScript a la derecha
  8. Ahora, reemplace el (* Su script va aquí *) con su script
  9. Guarde el service con un nombre significativo (p. Ej., ShutMeDown).

Ahora debería poder ejecutar el service (y, por lo tanto, su secuencia de commands) desde cualquier aplicación yendo a la list de Servicios dentro de cualquier menu de la Aplicación (por ejemplo, Buscador> Servicios, Safari> Servicios, TextEdit> Servicios, etc.) y select el service que acaba de creado.

Si también desea establecer un atajo de keyboard para activar cosas, proceda a continuación.

2. Creando un atajo de keyboard

  1. Vaya a Preferences del sistema> Teclado> Accesos directos
  2. Seleccione Servicios en la barra lateral
  3. Encuentra tu service (estará en la list en el lado derecho)
  4. Agregue un atajo haciendo doble clic en el nombre del service
  5. Ahora ve a Preferences del sistema> Seguridad y privacidad> Privacidad
  6. Seleccione Accesibilidad en la barra lateral
  7. Haga clic en el signo + (puede que necesite desbloquear el candado si está bloqueado)
  8. Agregar Automator.
  9. Agregar buscador (para encontrarlo, deberá navegar a /System/Library/CoreServices/Finder.app ).
  10. Salga de las Preferences del sistema.

Ahora debería poder utilizar el atajo de keyboard para ejecutar el service (y, por lo tanto, su secuencia de commands).

NOTA: Soy consciente de que, para algunos usuarios, los atajos de keyboard no parecen funcionar aunque se hayan asignado a un service. Este es un tema completamente diferente, pero si esto sucede en su caso, al less puede ejecutar el service desde cualquier aplicación que esté utilizando.

Si decides dar un vistazo a este enfoque, no dudes en comentarme si tienes alguna pregunta o problema.

Diré lo que descubrí hasta ahora:

Como se menciona en este script de ejecución antes del cierre , puede usar un logouthook para lograr el objective. Sin embargo, apple detuvo el soporte de rc.shutdown y quizás haga lo mismo para logouthook . La manzana alternativa que se está ofreciendo es launchd pero no pude encontrar un command que me permitiera ejecutar una secuencia de commands justo antes de cerrar la session.

launchd funciona bien como sustituto de un loginhook o cronjobs . Sin embargo, hay una solución para que pueda usarla en lugar de un logouthook . La solución ya está publicada en mi pregunta. Solo quiero mencionar cómo funciona:

De hecho, el script se ejecutará cuando la computadora se inicie, pero el command trap espera la señal de apagado para que la function deseada se ejecute cuando se envía la señal.

Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).