Para referência, todas as 3 opções funcionariam. A opção iCal, no entanto, tem mais limitações do que as outras.
(Existem GUIs para editar cron e launchd como mencionado em outras respostas)
Cron é o mais direto e conhecido e há muitos tutoriais disponíveis. O Coles Notes é adicionar a última linha abaixo ao seu crontab (editando /etc/crontab
ou usando crontab
na linha de comando):
MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"
No Mac OS X, cron
foi substituído por launchd
, mas launchd
é compatível com cron
, o que significa que você ainda pode usar cron
, mas na verdade é launchd
fazendo todo o trabalho. / p>
Se você quiser usar launchd
, também vai querer verificar outras questões aqui no Superusuário: (por exemplo, Como executo um comando launchd como root? ) para onde você deseja salvar seu arquivo de configuração (o arquivo plist) como quando ele é executado depende de qual diretório ele está armazenado e como é carregado (por exemplo, se você usou o sudo ou não) - semelhante ao cron.
Uma amostra é executada diariamente launchd plist (certifique-se de que o arquivo ee o rótulo sejam os mesmos - menos o plist do rótulo) a seguir - esse script é executado todos os dias às 3 minutos depois da meia-noite:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.IDENTIFIER_HERE.SOMETHING</string>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>00</integer>
<key>Minute</key>
<integer>03</integer>
</dict>
</dict>
</plist>
É importante notar também que as tarefas launchd se foram agendadas para quando o computador está dormindo ou desligado, elas serão executadas quando o computador ficar disponível novamente (ligando-o ou acordando) - embora apenas uma vez, não importa quantos dias pode ter sido. Edit: Eu só estava em um documento da Apple que dizia que, se a máquina estiver desligada, você perderá quaisquer eventos de inicialização durante esse tempo (seu script não será iniciado na inicialização), (o sleep inicia o script ao acordar)
Outra opção é usar " em " (verifique a página de manual com "man at"). O script pode reagendar com, por exemplo:
echo "sh $0 $@" | at 'date +%H:%M' tomorrow
(use "+ 10 minutos" em vez de "amanhã" para executá-lo a cada 10 minutos; para interromper o agendamento, basta fazer "at -l" para listar os ids de trabalho agendados e, em seguida, "at -r id "para remover o trabalho)
Você pode ter que iniciar o daemon correspondente (atrun) primeiro com (veja link ):
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
Vantagens: correção rápida, não é necessário acesso ao sudo / root, é fácil fazer padrões de programação complicados Desvantagem: não é um método padrão de agendamento para o OS X (que é o launchd)