Como posso definir uma tarefa para executar de vez em quando?

Como é que tenho um guião a cada 30 minutos? Presumo que haja diferentes formas de OSs diferentes. Estou a usar OS X.

Author: gsamaras, 2008-09-25

7 answers

Basta usar launchd . É um sistema de lançador muito poderoso e, enquanto isso, é o sistema de lançador padrão para Mac OS X (versão atual do OS X não iria mesmo arrancar 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. Conceitos de empréstimo de todos esses projetos, mas também oferecendo coisas que você pode não encontrar em outro lugar.

Cada serviço / tarefa é um arquivo. A localização do arquivo depende das perguntas: "quando este serviço deve ser executado?"e" de que privilégios o serviço necessitará?"

As tarefas do Sistema vão para

/Library/LaunchDaemons/

Se forem executados, não importa se algum utilizador Está ligado ao sistema ou não. Eles serão iniciados com privilégios" root".

Se eles só funcionarem se algum utilizador estiver ligado, eles vão para

/Library/LaunchAgents/

E será executado com os privilégios do utilizador que acabou de autenticar em.

Se eles correrem apenas se Tu estás logado, eles vão para

~/Library/LaunchAgents/

Onde está a tua pasta pessoal. Estas tarefas serão executadas com os seus privilégios, tal como se as tivesse iniciado por linha de comandos ou fazendo duplo-click num ficheiro no Localizador.

Note que também existe /System/Library/LaunchDaemons e /System/Library/LaunchAgents, mas como de costume, tudo o que está abaixo de /System é gerido pelo OS X. Você não colocará nenhum arquivo lá, você não mudará nenhum arquivo lá, a menos que você realmente saiba o que estás a fazer. A confusão na pasta de sistemas pode tornar o seu sistema inutilizável (colocá-lo num estado em que ele mesmo se recusará a iniciar novamente). Estes são os diretórios onde a Apple coloca as tarefas launchd que fazem com que o seu sistema funcione durante o arranque, inicie automaticamente os Serviços conforme necessário, execute tarefas de manutenção do sistema, e assim por diante.

Cada Tarefa launchd existe um ficheiro no formato plist. Deve ter notação de domínio reverso. Por exemplo, pode dizer o seu nome. tarefa

com.example.my-fancy-task.plist

Este plano pode ter várias opções e configurações. Escrever um por mão é subóptimo, você pode querer obter a ferramenta livre Lingon para criar suas tarefas. Esta ferramenta costumava ser livre, agora custa $5 na app store e $10 como a versão non app store (a versão non app store é muito mais poderosa e se você já planeja pagar por isso, a sério, obter a versão non app store). Se alguém conhece uma ferramenta comparável que é freeware ou open source, deixe-me uma linha nos comentários e eu vou recomendar que um (não quero anunciar aqui para o software comercial).

Como exemplo, pode parecer-se com isto.
<?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 da shell /usr/local/bin/my-script.sh a cada 1800 segundos (a cada 30 minutos). Você também pode ter a tarefa executada em certas datas/horas (basicamente o launchd pode fazer tudo o que o cron pode fazer) ou você pode até mesmo desativar o" OnDemand " fazendo com que o lançamento mantenha o processo permanentemente em execução (se ele desistir ou crashes, o launchd irá reiniciá-lo imediatamente). Você pode até limitar a quantidade de recursos que um processo pode usar (como disse antes, o Lingon mostra todas essas configurações em uma interface UI agradável).

Actualizar: mesmo que OnDemand ainda seja suportada, é depreciada. O novo cenário chama-se KeepAlive, o que faz muito mais sentido. Pode ter um valor booleano, e nesse caso é exatamente o oposto de OnDemand (configurando-o para false comporta-se como se OnDemand fosse true e ao contrário). O grande característica nova é, que ele também pode ter um valor de dicionário em vez de um booleano. Se ele tem um valor de dicionário, você tem um par de opções extras que lhe dão um controle de grãos mais fino em que circunstâncias a tarefa deve ser mantida viva. Por exemplo, ele só é mantido vivo enquanto o programa terminar com um código de saída de zero, apenas enquanto um determinado arquivo/diretório no disco existir, apenas se outra tarefa também estiver viva, ou apenas se a rede está atualmente em cima.

Também tu pode activar/desactivar manualmente as tarefas através da linha de comandos:

launchctl <command> <parameter>

O comando pode ser carregado ou descarregado, para carregar um plist ou descarregar de novo, caso em que o parâmetro é o caminho para o ficheiro. Ou o comando pode ser Iniciar ou parar, para apenas iniciar ou parar essa tarefa, sendo que nesse caso o parâmetro é a legenda (com.example.my-fancy-task). existem também outros comandos e opções.

Ver a documentação da Apple do formato plist e do launchctl ferramenta da linha de comandos (note que você pode seleccionar a versão do OS X no topo, dado que o formato / opções variam entre diferentes versões do OS X)

 103
Author: Mecki, 2013-08-14 20:22:09

Podias usar o gerador de placas muito conveniente: http://launched.zerowidth.com/ (não há necessidade de comprar nada...)

Dar-lhe - á uma linha de comandos para registar um novo trabalho agendado com o lançamento já recomendado

 28
Author: Kosmotaur, 2013-10-25 11:50:39

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

Por experiência própria, cron é o mais confiável. Quando fiz o teste, a launchd tinha uma série de bugs e peculiaridades. os alarmes iCal só funcionam quando você Está ligado (mas isso pode ser algo que você prefira).
 11
Author: Bruno De Fraine, 2008-09-25 12:30:48
Como Mecki disse, a lavagem seria o caminho a seguir. Existe uma interface GUI para o launchd chamada Lingon que você pode querer verificar, em vez de editar os arquivos de launchd manualmente:

O Lingon é uma interface gráfica para a criação de uma plataforma de edição arquivos de configuração para Mac OS X Leopard 10.5.

[snip...]

Editar um ficheiro de configuração é mais fácil do que nunca nesta versão e tem dois modos diferentes. Modo básico que tem o mais comum configuração facilmente disponível numa interface muito simples e modo especialista onde você pode adicionar todas as configurações diretamente no texto ou inserir através de uma ementa.

 5
Author: Jay, 2017-06-02 15:28:51

O Mac tem uma ferramenta de automação que é igual à do Escalonador de Tarefas no windows. Mas usando Automator você pode agendar uma tarefa diariamente e ligar a tarefa com evento recorrente de calendário para executar scripts em tempo especificado diariamente. consulte o link para executar programas diariamente no Mac OS

 3
Author: Jlearner, 2016-06-19 04:20:11

Para os scripts da apple, eu configurei um calendário especial iCal e uso alarmes para executá-los periodicamente. Para Ferramentas de linha de comando, eu uso lavanderia.

 2
Author: Mike Heinz, 2008-09-25 14:31:47
Para tua informação, enquanto sinto falta da siplicity, o cron é uma coisa do passado no OS X. Foi o watchdog no panther. Desde que o Tiger foi lavado. Então, se você está correndo Leopard cron não é uma opção.
 1
Author: , 2009-05-12 20:39:46