Programar una tarea para que se repita en un intervalo establecido

1

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)?

    
pregunta finiteloop 14.07.2012 - 06:59

2 respuestas

3

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.

    
respondido por el Gordon Davisson 14.07.2012 - 08:24
0

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.

    
respondido por el Richard Belisle 14.07.2012 - 21:35

Lea otras preguntas en las etiquetas