He escrito un script de Ruby que necesito ejecutar cada 12 horas. ¿Hay una manera fácil de hacer esto en OS X (específicamente Lion)?
He escrito un script de Ruby que necesito ejecutar cada 12 horas. ¿Hay una manera fácil de hacer esto en OS X (específicamente Lion)?
Hay un par de formas de hacer esto, pero los detalles dependen de un par de preguntas: ¿Es necesario que el script se ejecute como root (administrador) o un usuario regular? ¿Necesita ejecutarse en un programa específico, o solo en un intervalo de 12 horas?
La opción OS X-ish es crear un LaunchDaemon . Cree un archivo llamado /Library/LaunchDaemons/local.scriptname.plist, con contenidos como este:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.scriptname</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/script</string>
<string>someargument</string>
<string>anotherargument</string>
</array>
<key>StartInterval</key>
<integer>43200</integer>
<key>RunAtLoad</key>
<false/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
Notas: 43200 es de 12 horas en segundos, lo que significa que esto comenzará cada 12 horas a partir del inicio. Debe reemplazar el nombre del script con un identificador más apropiado tanto en el valor de Etiqueta como en el nombre del archivo (y si va a publicar este, reemplace el prefijo "local" por su nombre de dominio en orden inverso, por ejemplo, "example.com.scriptname" ). Si se ejecuta como alguien que no sea root, agregue:
<key>UserName</key>
<string>usertorunas</string>
Si lo necesita para ejecutarse a determinadas horas del día, reemplace la clave y el valor de StartInterval con algo como esto:
<key>StartCalendarInterval</key>
<array>
<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>
</array>
... reemplaza las Horas 6 y 18 (6pm) con las horas que deseas que se ejecuten.
La otra opción es usar cron, que es más unix genérico (pero funciona bien en OS X). Use el comando crontab -e
para crear / editar el archivo crontab. El crontab se creará para cualquier usuario con el que lo cree, por lo que si su script debería ejecutarse como root, use sudo crontab -e
. El crontab debería verse así:
0 6,18 * * * /path/to/script someargument otherargument
Tenga en cuenta que no hay un equivalente de StartInterval aquí, esto siempre se ejecuta a las 6am y 6pm.
Gran consejo arriba. Sin embargo, debo decir que usar cron es la mejor y más robusta solución. No solo es estable; También lo preparará para trabajar en otros entornos fuera de OS X.