0 votos

Plist no se ejecuta AppleScript usando launchctl

Estoy intentando programar mi AppleScript para que se ejecute en intervalos de 60 segundos y que ejecute dos scripts de shell y parece que he configurado mi plist correctamente para que se generen dos archivos (StandardErrorPath y StandardOutPath) una vez transcurridos 60 segundos, pero no veo que aparezcan los resultados de mis scripts de shell como lo hacían cuando ejecutaba el scripts en scripts Editor. Para mí esto parece significar que la sección ProgramArguments no está cargando mi AppleScript. ¿Puede alguien indicarme la dirección correcta? ¿Debería añadir algún tipo de registro a mi AppleScript para registrar el archivo de error en mi plist?

Archivo AppleScript (Shell script se ejecuta correctamente en script Editor y Terminal):

do shell script "cd /Users/user/Desktop/Projects/node/webmasters-cli && /Users/user/.nvm/versions/node/v4.3.2/bin/node app.js DesktopUSA"
do shell script "cd /Users/user/Desktop/Projects/node/webmasters-cli && /Users/user/.nvm/versions/node/v4.3.2/bin/node app.js DesktopAll"

plist (Ubicado en /Users/user/Library/LaunchAgents)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//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.webmasters.daily.pull</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/user/Desktop/Projects/node/webmasters-cli/daily-api-call.scpt</string>
    </array>
    <key>StartInterval</key>
    <integer>60</integer>
    <key>StandardErrorPath</key>
    <string>/tmp/webmastersDailyTest.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/webmastersDailyTest.out</string>
</dict>
</plist>

Pasos para cargar en launchctl:

1) Cambiado a directorio

2) corrió launchctl load com.user.webmasters.daily.pull.plist

3) Comprobado con launchctl list . plist apareció.

4) Comprobado /tmp y los archivos StandardErrorPath y StandardOutPath se crean transcurridos 60 segundos. No hay valores dentro de los archivos como se esperaba.

0 votos

¿Por qué no ejecutar los shell scripts directamente desde launchd?

0 votos

@Mark para ser honesto estoy aprendiendo acerca de la automatización de la programación en mac y no sé mucho acerca de launchd . ¿Puede programar shell scripts para que se ejecuten con una frecuencia específica? (Día de la semana, hora, etc.)

0 votos

Sí y eso es lo que está haciendo launchd se está ejecutando un programa que coiuld ser un shell script - para facilitar la escritura de la mirada plists en herramientas como LaunchControl

1voto

Steve Evans Puntos 155

Pruebe a añadir /usr/bin/osascript como la primera ProgramArguments . Esto dirá explícitamente launchd para utilizar el osascript para ejecutar su script.

Enfoque directo

¿Necesitas utilizar AppleScript para esta tarea de launchd? Si no es así, podría evitar un nivel de abstracción llamando directamente a node :

<key>WorkingDirectory</key>
<string>/Users/user/Desktop/Projects/node/webmasters-cli</string>
<key>ProgramArguments</key>
<array>
    <string>/Users/user/.nvm/versions/node/v4.3.2/bin/node</string>
    <string>app.js</string>
    <string>DesktopUSA</string>
</array>

0 votos

Gracias por la respuesta. No estoy seguro si necesitaría ya que apenas estoy aprendiendo sobre plists y launchd. Para resumir mi shell script arriba, estoy cambiando directorios a donde existe mi archivo app.js y luego indicando donde existe node y ejecutando el comman nodejs en mi archivo js con un argumento. Su respuesta anterior parece que sólo incluye la segunda mitad del comando. ¿Sería posible hacer ambas cosas dentro del plist?

0 votos

Las tareas de Launchd sólo pueden ejecutar un proceso. Podría modificar el trabajo launchd para llamar a su shell script directamente - entonces ambos comandos podrían ser colocados en el script. Si esto es para el trabajo, considere algo como Gestor de energía u otra herramienta de terceros.

1 votos

Tu código ha funcionado. Todo lo que hice fue añadir <string>/usr/bin/osascript</string> y mi AppleScript funcionó a las mil maravillas. Gracias.

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