2 votos

¿Cómo puedo ejecutar una aplicación con launchd a intervalos regulares?

Tengo una aplicación escrita en lenguaje AppleScripting que comprueba si el estado del S.M.A.R.T. es 'Verificado', si no lo es, me mostrará automáticamente un diálogo de alerta. Pero necesito que se ejecute cada 30 minutos. He utilizado cron antes pero nunca funciona con la extensión .app. Entonces, ¿cómo puedo lograr la ejecución de la aplicación a intervalos regulares utilizando launchd?

2 votos

Launchd tampoco funciona con los paquetes de aplicaciones (que es sólo una carpeta). Siempre hay que elegir un/el binario (por ejemplo, /usr/local/sbin/smartmontool o *.app/Contents/MacOS/app_binary)

0 votos

No es que esté en contra de AppleScript, pero ¿no sería esto mucho, mucho más fácil en bash?

0 votos

@Allan Eso, en parte, podría depender de lo cómodo que uno se sienta haciendo scripts en bash vs, AppleScript. Podría utilizar una combinación de ambos. bash para hacer la comprobación de estado S.M.A.R.T. y AppleScript a través de osascript para mostrar un cuadro de diálogo o una notificación en el Centro de notificaciones. Pero eso es también lo que do shell script en AppleScript es para.

1voto

Douglas Puntos 10417

Uso oascript a llamar a su ApplesScript.

$ oascript foobar.applescript

En su plist de su ProgramArguments definición para el lanzamiento de la app sería como sigue:

<key>ProgramArguments</key>
    <array>
        <string>osascript</string>
        <string>foobar.applescript</string>
    </array>


Para obtener su punto a ejecutar, usted necesita un StartInterval definición que toma un entero para el número de segundos (1800 durante 30 minutos) entre pistas.

<key>StartInterval</key>
<integer>1800</integer>


Un simple pero funcional plist sería como sigue:

<?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>

0 votos

Parece que no funciona estoy usando el archivo .scpt. ¿Puede ayudarme con un archivo .plist completo?

0 votos

Ver esto respuesta para más detalles sobre la escritura del plist

0 votos

Sí, gracias, pero quiero que se ejecute cada hora, no en una hora o día específico. Así que necesito ayuda en esto.

0voto

Oskar Puntos 1242

Apple documenta todo lo que necesitas para escribir un archivo XML hecho a mano para guardar en el sistema de archivos y luego cargarlo usando launchtl load /path/to/xml pero la documentación es muy densa, supone que tienes varios días o semanas de experiencia y tiempo para aprender.

Recomiendo empezar con una herramienta como LaunchControl o Lingon para facilitar su curva de aprendizaje y añadir una interfaz agradable 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 introduciría para sus 30 minutos y ejecutaría sólo cuando el usuario está conectado a las restricciones en la aplicación LaunchControl

enter image description here

Una vez más, usted puede hacer esto a mano, trabajando a través de cada obstáculo que se enfrentará (la depuración de los errores a la salida estándar y el error estándar cuando las cosas no funcionan, la depuración de los permisos y las ubicaciones de carpetas / archivos), pero eso es típicamente una pregunta demasiado amplia aquí para conseguir a alguien de una idea a la implementación de trabajo.

Yo optaría por las herramientas fáciles, a menos que tengas el deseo de dominar varias herramientas de scripting y el demonio de lanzamiento y el sistema de control bajo el capó.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X