1 votos

Programar una tarea para que se repita en un intervalo de tiempo establecido

He escrito un script en Ruby que necesito para ejecutar cada 12 horas. Hay una manera fácil de hacer esto en OS X (específicamente Lion)?

3voto

Nate Puntos 220

Hay un par de maneras de hacerlo, pero los detalles dependen de un par de preguntas: ¿el script se debe ejecutar como root (Administrador) o un usuario normal? Qué se necesita para ejecutar en cualquier horario específico, o simplemente de 12 horas de intervalo?

El OS X-ish opción es crear un LaunchDaemon. Cree un archivo denominado /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 y en cuestión de segundos, lo que significa que esto va cada 12 horas, comenzando en el arranque. Usted debe reemplazar scriptname con más apropiado identificador en tanto el valor de la Etiqueta y el nombre del archivo (y si vas a publicar esto, reemplace "local". prefijo con el nombre de dominio en orden inverso, por ejemplo, "ejemplo.com.scriptname"). Si se debe ejecutar como alguien distinto de la root, agregar:

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

Si usted necesita para ejecutar en determinados momentos del día, reemplace el StartInterval clave y valor 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>

...sustitución de 6 Horas y 18 (6pm) con las horas que usted desea que se ejecute.

La otra opción es el uso de cron, que es más genérico-unix (pero funciona bien en OS X). Utilice el comando crontab -e crear/editar el archivo crontab. El crontab se creará para cualquier usuario que la crea, por lo que si la secuencia de comandos debe ejecutarse como root, use sudo crontab -e. El crontab debería ser algo como esto:

0       6,18       *       *       *       /path/to/script someargument otherargument

Tenga en cuenta que no hay ningún equivalente de StartInterval aquí, esto siempre funciona a las 6am y 6pm.

0voto

Gero Puntos 1236

Gran consejo anterior. Sin embargo, yo tendría que decir que el uso de cron es la mejor, la solución más robusta. No sólo es estable; también te prepara para trabajar en otros entornos fuera de OS X.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X