Я пытаюсь запустить программу ruby как cron. Я понял, как запускать программу ruby из запуска. Проблема в том, что я не знаю, как сказать "запускать работу один раз каждое воскресенье". Ниже мой файл .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>

1 ответ1

1

Первая и самая большая проблема заключается в неправильном использовании ключей Program и ProgramArguments . Они довольно запутанные, потому что они соответствуют первым двум аргументам execvp , и если вы не понимаете execvp , вы не поймете эти ключи должным образом. Но есть простой способ сделать это в большинстве случаев: не используйте Program , и укажите полный путь к программе в первой строке в ProgramArguments:

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

(Примечание: я предполагаю, что вы пытаетесь передать пустой первый аргумент программе - если нет, удалите <string></string> .)

Вторая проблема, которую я вижу, это ключ WorkingDirectory - я почти уверен, что он не будет расширяться ~ в этом контексте, поэтому вам нужно явно указать полный путь:

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

Наконец, я думаю, что вам также может понадобиться указать час и минуту, чтобы начать его с:

<key>StartCalendarInterval</key>
<dict>
    <key>Weekday</key>
    <integer>7</integer>
    <key>Hour</key>
    <integer>3</integer>
    <key>Minute</key>
    <integer>15</integer>
</dict>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .