Tengo una aplicación que está escrita en lenguaje AppleScripting que verifica si el estado SMART es 'Verificado'; si no lo es, automáticamente me mostrará una alerta de diálogo. Pero necesito que funcione cada 30 minutos. Lo usé cron
antes pero nunca funciona con la extensión .app. Entonces, ¿cómo puedo ejecutar la aplicación a intervalos regulares usando launchd?
Úselo oascript
para llamar a su ApplesScript.
$ oascript foobar.applescript
En su plist
definición de ProgramArguments para iniciar la aplicación sería la siguiente:
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>foobar.applescript</string>
</array>
Para que su elemento se ejecute, necesita una definición de StartInterval que toma un número entero para la cantidad de segundos (1800 durante 30 minutos) entre ejecuciones.
<key>StartInterval</key>
<integer>1800</integer>
Un plist simple pero funcional se vería de la siguiente manera:
<?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>com.user.foobar.app</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>foobar.applescript</string>
</array>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
while (true) do open /path/to/foo.app; sleep 1800 done
? Podría ser más fácil que el camino hacia abajo convirtiéndolo en un demonio de lanzamiento adecuado o script de tipo de agente o instalando/activandocron
Apple documenta todo lo que necesita para escribir un archivo XML hecho a mano para guardarlo en el sistema de archivos y luego cargarlo, launchtl load /path/to/xml
pero la documentación es muy densa, se supone que tiene varios días o semanas de experiencia y tiempo para aprender.
Recomiendo comenzar con una herramienta como LaunchControl o Lingon para facilitar su curva de aprendizaje y agregar una buena interfaz para elegir tiempos como 30 minutos para el intervalo de repetición en lugar de tener que codificar 1800 segundos en el archivo xml.
Esto es lo que ingresaría para sus 30 minutos y ejecutaría solo cuando el usuario haya iniciado sesión. Restricciones en la aplicación LaunchControl
Nuevamente, puede hacer esto a mano, superando todos los obstáculos que enfrentará (errores de depuración para estandarizar y error estándar cuando las cosas no funcionan, permisos de depuración y ubicaciones de carpetas/archivos), pero esa es una pregunta demasiado amplia aquí para obtener alguien de una idea a la implementación de trabajo.
Yo elegiría las herramientas fáciles a menos que desee dominar varias herramientas de secuencias de comandos y el demonio de lanzamiento y el sistema de control bajo el capó.
klanomath
Alano
usuario3439894
bash
comparación con AppleScript. Podría usar una combinación de ambos.bash
para realizar la verificación de estado SMART y AppleScript a través deosascript
para mostrar un cuadro de diálogo o notificación en el Centro de notificaciones. Pero para eso tambiéndo shell script
está AppleScript.Alano
diskutil info diskX | grep -i smart
). Esa sería la carne y las papas del guión allí mismo.usuario3439894
display dialog "SMART Status: " & (do shell script "diskutil info disk0 | awk '/SMART Status:/{print $3}'") buttons {"OK"} default button 1
bmike
launchd
y,launchctl
dado que son muy poderosos, solo que su pregunta podría ser demasiado amplia para una respuesta de dos o tres párrafos. Además, esto no impide que alguien sea amable y haga todo el trabajo por ti.