Como posso obter um script para ser executado todos os dias no Mac OS X?

57

Cron? Lançado? iCal

Se sim, como?

    
por Paul D. Waite 02.04.2010 / 22:21

10 respostas

55

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)

    
por 02.04.2010 / 23:19
8

LaunchControl é outra GUI para launchd / launchctl. Enquanto as alternativas mencionadas por outros são perfeitamente capazes de lançar um script diariamente, com o LaunchControl você pode configurar agendas complexas (como "uma vez a cada dia da semana, nos finais de semana a cada hora entre 14h e 20h"). Também é (AFAIK) a única ferramenta que realmente valida o trabalho. Se um trabalho não funcionar como esperado, ele mostrará o motivo.

É grátis tentar o tempo que quiser.

    
por 27.01.2014 / 05:06
5

O CronniX é um bom front-end de GUI para agendar trabalhos do cron no mac ... Bastante decente se você não usa Não quero ir e aprofundar a documentação do cron.

    
por 02.04.2010 / 22:55
2
  • Para o iCal, convém ler este artigo .
  • Você deve encontrar tutoriais suficientes para cron se pesquisar no Google.

Depende do que você quer: os scripts do iCal só serão executados se você estiver logado, cron executa o script sem estar logado. Eu não sei se o iCal executa um script se o Mac foi ativado em a hora em que o script deveria ter sido executado. cron está fazendo isso.

    
por 02.04.2010 / 22:28
2

Uma atualização: você pode conferir alguns aplicativos na App Store do Mac OS X que fazem isso:

O Lingon também parece estar disponível também, dependendo de qual sistema operacional você está executando.

    
por 04.10.2013 / 01:24
1

Eu sempre uso o Lingon para isso, mas parece que está fora de desenvolvimento. Você poderia tentar o Crontooie , mas eu nunca o usei pessoalmente. Ou apenas edite o arquivo crontab no terminal.

    
por 02.04.2010 / 22:55
1

Se você quiser experimentar o FREE, eu sugeriria Task Till Dawn

link

    
por 26.03.2016 / 22:31
1

Aqui está um utilitário simples e gratuito para gerar XML plist:

link

Com este utilitário, não é necessário instalar um programa, basta salvar os resultados na pasta Library / LaunchAgents.

    
por 09.11.2016 / 21:38
0
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $ 

... quaisquer que sejam as linhas de comando para ".... cortar ...." serão executadas a cada cinco minutos.

30 anos de progresso, e o 'cron' ainda é meu agendador favorito.

-C

    
por 09.06.2010 / 23:35
0

Se um evento de calendário atender às suas necessidades, o aplicativo Automatizador integrado também permite criar alarmes de calendário acionados por eventos de calendário. Você pode usar algumas das ações internas baseadas na interface do usuário para fazer o que quiser, ou também pode executar algum aplicativo ou um AppleScript, JavaScript ou shell script personalizado.

    
por 13.02.2018 / 04:04