Pergunta

Como faço para ter um script executado a cada, digamos, 30 minutos? Presumo existem maneiras diferentes para diferentes sistemas operacionais. Estou usando OS X.

Foi útil?

Solução

Apenas uso launchd . É um sistema lançador muito poderoso e, entretanto, é o sistema lançador padrão para Mac OS X (versão atual OS X não seria mesmo de iniciar sem ele). Para aqueles que não estão familiarizados com launchd (ou com o OS X em geral), é como um híbrido entre init, cron, at, SysVinit (init.d), inetd, upstart e systemd. Emprestando conceitos de todos estes projectos, mas também oferecendo coisas que você não pode encontrar em outro lugar.

Cada serviço / tarefa é um arquivo. O local do arquivo depende das perguntas: "Quando é que este serviço deveria correr?" e "Que privilégios será a necessidade de serviço?"

tarefas do sistema vá para

/Library/LaunchDaemons/

se deve correr, não importa se algum usuário estiver conectado ao sistema ou não. Eles vão ser iniciado com privilégios de "root".

Se eles deve ser executado apenas se qualquer usuário está logado, eles vão para

/Library/LaunchAgents/

e será executado com os privilégios do usuário que apenas identificado.

Se eles correrão somente se você está logado, eles vão para

~/Library/LaunchAgents/

onde ~ é seu diretório home. Estes tarefa será executada com os seus privilégios, assim como se você lhes tinha começado a si mesmo pela linha de comando ou clicando duas vezes um arquivo no Finder.

Note que também existe /System/Library/LaunchDaemons e /System/Library/LaunchAgents, mas como de costume, tudo sob /System é gerido pelo OS X. Você não pode colocar todos os arquivos lá, você não deve alterar todos os arquivos lá, a menos que você realmente saiba o que está fazendo. Brincando nos Sistemas pasta pode tornar seu sistema inutilizável (obtê-lo em um estado onde ele vai mesmo recusar-se a arrancar de novo). Estes são os diretórios onde a Apple coloca as tarefas launchd que obter o seu sistema instalado e funcionando durante a inicialização, iniciar automaticamente os serviços conforme necessário, executar tarefas de manutenção do sistema, e assim por diante.

Cada tarefa launchd existe um ficheiro em formato plist. Ela deve ter notação de nome de domínio reverso. Por exemplo. você pode nomear sua tarefa

com.example.my-fancy-task.plist

Esta plist pode ter várias opções e configurações. Escrevendo um por mão está abaixo do ideal, você pode querer obter a ferramenta gratuita Lingon para criar suas tarefas. Esta ferramenta costumava ser livre, agora custa US $ 5 na App Store e US $ 10 como a versão loja não aplicativo (a versão não loja de aplicativos é muito mais poderoso e se você já está pensando em pagar por ele, sério, obter a loja não aplicativo versão). Se alguém souber de uma ferramenta semelhante que é freeware ou código aberto, deixa-me cair uma linha nos comentários e eu vou em vez de recomendar que um (não gostaria de anunciar aqui para software comercial).

Apenas como exemplo, poderia ter esta aparência

<?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>com.example.my-fancy-task</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/my-script.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>1800</integer>
</dict>
</plist>

Este agente irá executar o script shell /usr/local/bin/my-script.sh a cada 1800 segundos (a cada 30 minutos). Você também pode ter de execução da tarefa em determinadas datas / horários (basicamente launchd pode fazer tudo o cron pode fazer) ou você pode até desativar "OnDemand" causando launchd para manter o processo permanentemente em execução (se ele sai ou falhas, launchd irá reiniciar imediatamente) . Você pode até mesmo limitar a quantidade de recursos que um processo pode usar (como disse antes, Lingon mostra todas as configurações em uma interface agradável UI).

Update: Mesmo que OnDemand ainda é suportado, é obsoleto. A nova configuração é nomeado KeepAlive, que faz muito mais sentido. Ele pode ter um valor booleano, que no caso é exatamente o oposto do OnDemand (definindo-o como false se comporta como se OnDemand é true e vice-versa). A grande novidade é que ele também pode ter um valor dicionário em vez de um booleano. Se ele tem um valor dicionário, você temum par de opções extras que lhe dão controle de grão mais fino em que circunstâncias a tarefa deve ser mantido vivo. Por exemplo. ele só é mantido vivo desde que o programa terminou com um código de saída de zero, apenas enquanto um arquivo certo / diretório no disco existe, apenas se outra tarefa também está vivo, ou apenas se a rede está atualmente se.

Além disso, você pode ativar manualmente / desativar tarefas via linha de comando:

launchctl <command> <parameter>

comando pode ser carregar ou descarregar, para carregar um plist ou descarregá-lo de novo, no qual parâmetro caso é o caminho para o arquivo. Ou comando pode ser iniciar ou parar, apenas para iniciar ou parar tal tarefa um, no qual parâmetro caso é o rótulo (com.example.my-fantasia-tarefa). Outros comandos e opções existem também.

documentação See da Apple no formato plist e do launchctl ferramenta de linha de comando (note que você pode selecionar a versão oS X no topo, já que o formato / opções variam entre diferentes versões oS X)

Outras dicas

Você pode usar o gerador plist muito conveniente: http://launched.zerowidth.com/ (não há necessidade de comprar qualquer coisa ... )

ele vai te dar uma concha de uma linha para registrar um novo trabalho agendado com o já recomendado launchd

Em MacOSX, você tem pelo menos as seguintes opções:

A partir da experiência pessoal, cron é o mais confiável. Quando eu testei, launchd teve um número de erros e peculiaridades. alarmes iCal só correr quando você está logado (mas que pode ser algo que você preferir).

Como Mecki apontou, launchd seria o caminho a percorrer com isso. Há uma interface GUI para launchd chamado Lingon que você pode querer verificar para fora, em vez de editar o arquivos launchd à mão:

Lingon é uma interface gráfica para criar um launchd edição arquivos de configuração para Mac OS X Leopard 10.5.

[snip ...]

Como editar um arquivo de configuração é mais fácil do que nunca nesta versão e tem dois modos diferentes. Modo básico que tem a mais comum configurações prontamente disponíveis em uma interface muito simples e Expert Mode onde você pode adicionar todas as configurações seja diretamente no texto ou inserção -los através de um menu.

MAC OS tem um Automator Ferramenta que é mesma que a de Agendador de Tarefas nas janelas. E usando Automator você pode agendar tarefas em base diária e vincular a tarefa com evento de calendário recorrente para executar scripts em tempo especificado diária. referem ligação para executar scripts em base diária no Mac OS

Para scripts Apple, eu configurar um especial iCal do calendário e usar alarmes para executá-los periodicamente. Para ferramentas de linha de comando, eu uso launchd.

FYI: enquanto eu faço isso perca de siplicity, cron é uma coisa do passado no OS X. Foi watchdog na pantera. Desde Tiger tem sido launchd. Então, se você estiver executando cron Leopard não é uma opção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top