Cron script no se ejecuta en Mavericks

11

He configurado un archivo crontab de usuario de la siguiente manera:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

Pero no se ejecutará. Esperé, como, 10-15 minutos. ¿Por qué?

El comando auto-update.sh se ejecuta fácilmente si se ejecuta manualmente. ¿Cómo puedo separar la cadena de ejecución y hacer que mi script se ejecute desde cron?

RomaValcer
fuente
1
¿Qué sistema operativo estás ejecutando? Cron está en desuso en OS X, por lo que es posible que necesite iniciar el daemon.
bmike
Lo último, 10.9.2. ¿Cómo lo hago? Solo quiero un script que funcione cada hora, por ejemplo. En el script anterior estaba desesperado porque no funcionaba, y lo modifiqué para que funcionara cada 2 minutos.
RomaValcer
1
El demonio cron debe iniciarse automáticamente (por su reemplazo, launchd) si existe un archivo crontab. Consulte /System/Library/LaunchDaemons/com.vix.cron.plist (especialmente la KeepAlive y QueueDirectories artículos).
Gordon Davisson
Bien, Keeplive está ahí, pero solo la ruta que aparece en la lista es '/ etc / crontab' que no existe. En QueueDirectories hay un archivo existente en la carpeta restringida '/ usr / lib / cron / tabs'. Al abrirlo con su y vim, está mi tarea.
RomaValcer

Respuestas:

16

El entorno en el que se ejecuta un trabajo cron es bastante diferente de un shell interactivo; es probable que el script se esté ejecutando, pero no con éxito. Una de las mayores diferencias es que para las tareas cron, el PATH predeterminado es solo "/ usr / bin: / bin", por lo que si usa cualquier comando que no esté en / usr / bin o / bin, no lo hará. se encuentra a menos que su secuencia de comandos establezca su propio PATH o proporcione rutas explícitas a los comandos. La otra gran diferencia es simplemente que no está conectado a una sesión interactiva, por lo que si intenta hacer algo interactivo (leer desde el terminal, etc.) eso fallará. Intenta cambiar la entrada cron a:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

... y ver si algo informativo aparece en el registro.

Gordon Davisson
fuente
Esto es mejor que mi esfuerzo; siéntase libre de incorporar mi idea de registrador si hace que su respuesta sea mejor.
bmike
El registro simplemente no apareció.
RomaValcer
@RomaValcer: eso es extraño, significa que ni siquiera está llegando al lanzamiento del script. Correría ps -ax | grep [c]ron y ver si enumera el demonio cron (/ usr / sbin / cron) en ejecución. Si es así, prueba la prueba de logger de bmike. En cualquier caso, verifique los registros (/var/log/system.log y el elemento "Todos los mensajes" en la utilidad de la Consola) y vea si hay algo que parezca relevante.
Gordon Davisson
Sí, está ahí. Pero los registros no muestran nada que comience a la hora programada.
RomaValcer
4

Es difícil decirlo, pero ¿qué sucede si agrega un segundo trabajo cron para ejecutar cada 5 minutos aproximadamente y hace que llame a alguna herramienta creada por el sistema que registre mensajes en system.log?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

De esa manera, sabrá que cron se está ejecutando para el usuario en cuestión y puede concentrarse en iniciar cron o arreglar su script para que se ejecute en el entorno de cron limitado. (Puede mirar el reloj de la pared y elegir algunas veces para el próximo o incluso los próximos minutos, p. Ej., Editar a las 12:34 y colocar 35,36,37,38 minutos para ejecutar y guardar el archivo cron. .)

bmike
fuente
4

Ha pasado un tiempo que hiciste esta pregunta, pero parece que no surgió ninguna solución en este hilo.

Dependiendo de la forma en que cree un usuario en crontab, podría ser necesario ejecutar esto después de editarlo:

crontab ~/.yourcrontabfile

Para ver si el nuevo crontab (también después de modificarlo) se ha activado, verifique con:

crontab -l
Ben
fuente
Eso no funciona. Crontab -l muestra que los crons están configurados, pero todavía no funciona.
PKHunter
1

Yo tuve el mismo problema. Necesitas agregar la ruta a tu script de bash:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin
Ivan Zhirkov
fuente
0

Yo tuve el mismo problema. Se fue después de agregar una nueva línea después de mi trabajo en mi archivo crontab (soy un total de crontab n00b, así que no tengo idea si este comportamiento es ampliamente conocido o no).

RMD
fuente