Come creare un LaunchAgent con StartCalendarInterval

2

Voglio iniziare a sostituire crontabs con LaunchAgents. Il mio primo tentativo non funziona.

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

Lo script mcworldsBackup.sh funziona perfettamente standalone. L'ho fatto registrare un timestamp su un file ogni volta che viene eseguito e finora launchd non l'ha eseguito una volta sola.

Ho controllato e riparato i permessi del mio disco usando DiskUtility, il plist è in ~ / Library / LaunchAgents / com.nocturnal.mcworldsBackup.plist con permessi 0644, come tutti gli altri file .plist già presenti. Sono tutti di mia proprietà: lo staff.

Se grep per mcworldsBackup.sh in / var / log / * non trovo nulla, nessun indizio sul motivo per cui non viene eseguito.

Dopo aver creato il plist per la prima volta, ho eseguito il logout e riavviato il computer, anche riavviato il computer più volte, anche se la documentazione dice che è sufficiente effettuare il login.

    
posta Stefan Midjich 22.01.2012 - 13:37
fonte

1 risposta

3

Devi specificare il percorso completo in ProgramArguments. Le cose che la tua shell normalmente espande, come ~ e * non sono espanse da launchd .

Dopo aver apportato queste modifiche, questo LaunchAgent ha funzionato per me.

Hai detto di aver apportato queste modifiche, ma non l'ha risolto. È possibile che tu non abbia ricaricato LaunchAgent dopo aver apportato le modifiche.

Risoluzione dei problemi relativi ai LaunchAgent

Puoi verificare se il tuo LaunchAgent è attualmente caricato eseguendo

launchctl list | grep com.nocturnal.mcworldsBackup

Se non è in esecuzione, puoi caricarlo usando

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

Se apporti modifiche al file Plist, dovrai scaricarlo usando

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

Dovrai quindi caricarlo di nuovo, usando il comando dall'alto.

Se vuoi forzare l'avvio di LaunchAgent ora, invece di aspettare fino alle 4:30, puoi eseguire

launchctl start com.nocturnal.mcworldsBackup

Puoi quindi elencarlo usando

launchctl list | grep com.nocturnal.mcworldsBackup

La prima colonna del risultato è il PID del processo, se è attualmente in esecuzione. La seconda colonna è il codice di uscita restituito l'ultima volta che è stata eseguita. Usalo per verificare se ha funzionato correttamente. In caso contrario, il messaggio di errore viene scritto su /var/log/system.log .

    
risposta data 13.04.2012 - 16:01
fonte

Leggi altre domande sui tag