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

0

Estou tentando executar um programa ruby ​​como um cron. Eu descobri como executar o programa ruby ​​a partir de um launchd. O problema é que não sei como dizer "Executar o trabalho uma vez todo domingo". 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>
Chan
fonte

Respostas:

1

O primeiro e maior problema é que você está usando as teclas Programe ProgramArgumentserradas. Eles são um pouco confusos porque correspondem aos dois primeiros argumentos e execvp, 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 Programe coloque o caminho completo do 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>

(Observação: suponho que você esteja tentando passar um primeiro argumento em branco para o programa - caso contrário, remova o <string></string>.)

O segundo problema que vejo é a WorkingDirectorychave - tenho certeza de que não será expandido ~nesse contexto, portanto, é necessário especificar explicitamente o caminho completo:

<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>
Gordon Davisson
fonte