Cómo crear un LaunchAgent con StartCalendarInterval

2

Quiero comenzar a reemplazar los crontabs con LaunchAgents. Mi primer intento no funciona.

<?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.nocturnal.mcworldsBackup</string>
    <key>ProgramArguments</key>
    <array>
            <string>~/bin/mcworldsBackup.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
            <key>Hour</key>
            <integer>4</integer>
            <key>Minute</key>
            <integer>30</integer>
    </dict>
</dict>
</plist>

El script mcworldsBackup.sh funciona bien de manera autónoma. He hecho que registre una marca de tiempo en un archivo cada vez que se ejecuta y hasta ahora launchd no lo ha ejecutado una sola vez.

He comprobado y reparado los permisos de mi Disco usando DiskUtility, el plist está en ~ / Library / LaunchAgents / com.nocturnal.mcworldsBackup.plist con permisos 0644, igual que todos los otros archivos .plist que ya están allí. Todos son propiedad de mí: el personal.

Si grep para mcworldsBackup.sh en / var / log / * no encuentro nada, no hay pistas sobre por qué no se está ejecutando.

Después de crear por primera vez el plist, me desconecté y volví a iniciar sesión, también reinicié la computadora varias veces, aunque la documentación indica que solo necesitas iniciar sesión.

    
pregunta Stefan Midjich 22.01.2012 - 13:37

1 respuesta

3

Debe especificar la ruta completa en ProgramArguments. Las cosas que tu shell normalmente expande, como ~ y * no se expanden en launchd .

Después de hacer esos cambios, este LaunchAgent funcionó para mí.

Usted dijo que hizo estos cambios, pero no lo solucionó. Es posible que no haya vuelto a cargar LaunchAgent después de realizar los cambios.

Solucionar problemas de los agentes de inicio

Puede verificar si su LaunchAgent está cargado actualmente ejecutando

launchctl list | grep com.nocturnal.mcworldsBackup

Si no se está ejecutando, puede cargarlo utilizando

launchctl load ~/Library/LaunchAgents/com.nocturnal.mcworldsBackup.plist

Si realiza algún cambio en el archivo plist, deberá descargarlo utilizando

luanchctl unload ~/Library/LaunchAgents/com.nocturnal.mcworldsBackup.plist

Luego deberás cargarlo nuevamente, usando el comando de arriba.

Si desea forzar que LaunchAgent se inicie ahora, en lugar de esperar hasta las 4:30, puede ejecutar

launchctl start com.nocturnal.mcworldsBackup

Luego puedes listarlo usando

launchctl list | grep com.nocturnal.mcworldsBackup

La primera columna del resultado es el PID del proceso, si se está ejecutando actualmente. La segunda columna es el código de salida devuelto la última vez que se ejecutó. Use esto para verificar si funcionó correctamente. Si no, el mensaje de error se escribe en /var/log/system.log .

    
respondido por el Nathan Grigg 13.04.2012 - 16:01

Lea otras preguntas en las etiquetas