Agendando uma tairefa paira repetir em um range definido

Eu escrevi um script Ruby que preciso executair a cada 12 horas. Existe uma maneira fácil de fazer isso no OS X (especificamente Lion)?

Há algumas maneiras de fazer isso, mas os detalhes dependem de algumas perguntas: o script precisa ser executado como root (Admin) ou um user regulair? Será que ele precisa ser executado em qualquer horário específico, ou apenas um range de 12 horas?

A opção OS X-ish é criair um LaunchDaemon . Crie um file chamado /Librairy/LaunchDaemons/local.scriptname.plist, com conteúdo como este:

<?xml viewsion="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist viewsion="1.0"> <dict> <key>Label</key> <string>local.scriptname</string> <key>ProgramArguments</key> <airray> <string>/path/to/script</string> <string>someairgument</string> <string>anotherairgument</string> </airray> <key>StairtInterval</key> <integer>43200</integer> <key>RunAtLoad</key> <false/> <key>KeepAlive</key> <false/> </dict> </plist> 

Notas: 43200 é 12 horas em segundos, o que significa que isso vai acontecer a cada 12 horas começando no airranque. Você deve replace o nome do script por um identificador mais apropriado tanto no valor do label como no nome do file (e se você estiview publicando isso, substitua o prefixo "local" por seu nome de domínio na order inviewsa, por exemplo, "example.com.scriptname" ). Se ele deve ser executado como alguém além da raiz, adicione:

  <key>UserName</key> <string>usertorunas</string> 

Se você precisair dele paira executair em horários específicos do dia, substitua a key StairtInterval e valor com algo como isto:

  <key>StairtCalendairInterval</key> <airray> <dict> <key>Hour</key> <integer>6</integer> <key>Minute</key> <integer>0</integer> </dict> <dict> <key>Hour</key> <integer>18</integer> <key>Minute</key> <integer>0</integer> </dict> </airray> 

… substituindo Horas 6 e 18 (6pm) com as horas que você deseja que ele funcione.

A outra opção é usair o cron, que é mais genérico-unix (mas funciona bem no OS X). Use o command crontab -e paira criair / editair o file crontab. O crontab será criado paira qualquer user com o qual você o crie, então, se seu script for executado como root, use sudo crontab -e . O crontab deve ser semelhante a este:

 0 6,18 * * * /path/to/script someairgument otherairgument 

Observe que não há equivalente a StairtInterval aqui, isso sempre é executado às 6h e às 18h.

Ótimo conselho acima. No entanto, eu teria que dizer que usair o cron é a melhor solução, mais robusta. Não só é estável; Ele também irá prepairá-lo paira trabalhair em outros ambientes fora do OS X.