Como executar uma tarefa launchd todo final de semana uma vez?

0

Estou tentando executar um programa ruby como cron. Eu descobri como executar o programa Ruby de um launchd O problema é que eu não sei como dizer "Executar o trabalho uma vez todos os domingos". Abaixo está o meu arquivo .plist

<?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>EnableGlobbing</key>
    <false/>
    <key>Label</key>
    <string>ScratchFolders.job</string>
    <key>ProcessType</key>
    <string>Background</string>
    <key>Program</key>
    <string>/usr/local/rvm/wrappers/scratch-monitor/ruby</string>
    <key>ProgramArguments</key>
    <array>
        <string></string>
        <string>scratch-clean.rb</string>
    </array>
    <key>StandardErrorPath</key>
    <string>/tmp/ScratchFolders.job.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/ScratchFolders.job.out</string>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Weekday</key>
            <integer>7</integer>
        </dict>
    </array>
    <key>WorkingDirectory</key>
    <string>~/automation-scripts/</string>
</dict>
</plist>
    
por Chan 27.04.2014 / 06:48

1 resposta

1

O primeiro e maior problema é que você está usando as chaves Program e ProgramArguments erradas. Eles são bastante confusos porque correspondem aos dois primeiros argumentos para execvp e, a menos que você entenda execvp , não entenderá essas chaves corretamente. Mas há uma maneira simples de fazer isso na maioria dos casos: não use Program e coloque o caminho completo para o programa na primeira string em ProgramArguments :

<key>ProgramArguments</key>
<array>
    <string>/usr/local/rvm/wrappers/scratch-monitor/ruby</string>
    <string></string>
    <string>scratch-clean.rb</string>
</array>

(Nota: Estou assumindo que você está tentando passar um primeiro argumento em branco para o programa - se não, remova o <string></string> .)

O segundo problema que vejo é a chave WorkingDirectory - tenho certeza de que não expandirá ~ neste contexto, então você precisa especificar o caminho completo explicitamente:

<key>WorkingDirectory</key>
<string>/Users/chan/automation-scripts/</string>

Por fim, acho que você também pode precisar especificar a hora e o minuto para iniciá-lo em:

<key>StartCalendarInterval</key>
<dict>
    <key>Weekday</key>
    <integer>7</integer>
    <key>Hour</key>
    <integer>3</integer>
    <key>Minute</key>
    <integer>15</integer>
</dict>
    
por 27.04.2014 / 17:46