3 votos

Configurar launchd

Tengo un plist de launchd en ~/Library/LaunchAgents diseñado para ejecutar un script ubicado en ~/writout.sh todos los días a las 10:30 de la mañana:

<?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>local.jackson.testwrite.plist</string>
    <key>Program</key>
    <string>/Users/jacksonkearl/writeout.sh</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>10</integer>
        <key>Minute</key>
        <integer>30</integer>
    </dict>
</dict>
</plist>

El script es:

#!/bin/bash
echo "it works" >> log.txt

Sin embargo, no se escribe nada en el momento deseado.

¿Hay pasos que deba seguir para alertar a launchd del nuevo agente? ¿O cómo puedo hacer que el proceso se inicie?

6voto

Oskar Puntos 1242

Para depurar esto, querrá habilitar la redirección.

<key>StandardErrorPath</key>
<string>/tmp/local.job.err</string>
<key>StandardOutPath</key>
<string>/tmp/local.job.out</string>

También he colocado mi versión de tu script en /usr/local/bin y me aseguré de que fuera ejecutable con chmod a+x

El error que obtengo es:

/usr/local/bin/writeout.sh: line 3: log.txt: Permission denied

Por lo tanto, es posible que desee enviar su echo comando para $TMPDIR o en otro lugar donde se pueda escribir. Parece que la ruta por defecto para launchd no es uno en el que un usuario pueda escribir (y probablemente por una buena razón).

Pero, hacer launchd/launchctl a mano es duro. Recomiendo encarecidamente el uso de una herramienta como LaunchControl o Lingon . Ellos proporcionan la ayuda y la automatización que me hace mucho mejor en estos scripts.

Usando Launch Control - rápidamente me permitió recrear su trabajo, tenía todo tipo de consejos útiles, y lo más importante sabía sugerir la redirección para depurar el script de salida / condición de error.

enter image description here

Con un solo clic, añadió las líneas anteriores a mi archivo plist y se ofreció a guardarlo y recargar el trabajo por mí.

3voto

Angelo Puntos 11

Es necesario cargar el agente de lanzamiento en launchd.

  1. Terminal abierta
  2. Tipo cd ~/Library/LaunchAgents
  3. Tipo launchctl load -w local.jackson.testwrite.plist (suponiendo que ese sea el nombre de su archivo plist)

Esto cargará y habilitará persistentemente su plist. Puede comprobar si está cargado con launchctl list

3voto

klanomath Puntos 19587

Tienes varios errores en tu archivo plist:

<key>Label</key>
<string>local.jackson.testwrite.plist</string>

se convierte en

<key>Label</key>
<string>local.jackson.testwrite</string>

y al plist le falta un

</plist>

al final. El plist debería tener finalmente este aspecto:

<?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>local.jackson.testwrite</string>
    <key>Program</key>
    <string>/Users/jacksonkearl/writeout.sh</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>10</integer>
        <key>Minute</key>
        <integer>30</integer>
    </dict>
</dict>
</plist>

Para cargar el LaunchAgent introduzca:

launchctl load /Users/jacksonkearl/Library/LaunchAgents/local.jackson.testwrite.plist

Para cargar el LaunchAgent de forma permanente introduzca

launchctl load -w /Users/jacksonkearl/Library/LaunchAgents/local.jackson.testwrite.plist

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