Root crontab no guardará

Estoy tratando de agregar una entrada crontab al crontab de mi usuario raíz. Puedo agregar una entrada sin problemas al crontab de mi usuario habitual, pero cuando hago suroot al usuario e intento agregar una entrada crontab, no guarda la entrada.

El proceso por el que estoy pasando es:

$sudo su
$crontab -e
# write out my crontab entry and then :wq to write and quit vi
$crontab -l
crontab: no crontab for root

También intenté salir de vi usando wq!y todavía no guardará la entrada.

La entrada que estoy ingresando es:

* * * * * /sayhi.sh

sayhi.shes un script de shell simple que estoy usando para intentar verificar que el trabajo cron se está ejecutando.

¿Hay algo diferente que deba hacer si intento crear una entrada crontab para root? He estado buscando y no he visto nada sobre crontab que sea particular para el usuario root.

¡Cualquier ayuda sería apreciada!

Respuestas (2)

Sus comandos deberían funcionar, sin embargo, no es como yo lo haría.

En su lugar, intente: -

sudo crontab -e -u root

luego a la lista: -

sudo crontab -l -u root

Como regla general, me tomo muchas molestias para nunca ejecutar un shell raíz. Cuando lo hago, uso sudo -sen lugar de sudo su.

Cuando salga de vi, debería ver dos líneas: -

crontab: no crontab for root - using an empty one
crontab: installing new crontab

Si no consigues esas dos líneas tienes serios problemas. Si lo hace y luego el comando de lista no muestra nada, sospecharía problemas de permisos.

Tampoco usaría su línea de ejemplo ya que le está pidiendo al sistema que ejecute "sayhi.sh" una vez por minuto todo el día, todos los días. También me pregunto sobre la ruta "/sayhi.sh": ¿realmente tiene el script en la parte superior de su unidad de arranque? Esa tampoco es una buena idea o quizás te refieres a "~/sayhi.sh", que en este caso estaría en el directorio de inicio raíz (generalmente /var/root) o te refieres a tu directorio de inicio. En los archivos crontab, es mejor codificar explícitamente la ruta completa, independientemente.

También se da cuenta de que muchos resultados del trabajo cron no irán a ningún terminal, sino que se enviarán por correo electrónico a la raíz (de forma predeterminada).

Si desea verificar que cron está ejecutando tareas de una manera simple

*/5 * * * *   echo "CRON" > /Users/myname/.cronout

hará eso (el primer campo ejecuta la tarea de forma mucho más razonable cada 5 minutos).

Los propios crontabs se almacenan en /usr/lib/cron/tabs. /usr/lib/crones en realidad un enlace /var/aty si vas allí encontrarás el tabsdirectorio y también el cron.denyarchivo. Verifique que nadie haya agregado la raíz a eso y si aún no tiene alegría, puede intentar:

echo > /var/at/tabs/root

que debería crear un archivo vacío que luego podría editar.

~ funciona en crontab - Siempre daría la ruta completa
@Mark - sí lo hace. Va a la casa del propietario de crontab, pero como usted, siempre codifico completamente las rutas en crontabs (y scripts de shell y funciones bash).
@TonyWilliams, el 'sayhi.sh' en el nivel raíz y cada minuto es puramente para fines de prueba. El script de shell real que quiero ejecutar está en mi carpeta de inicio y eventualmente se ejecutará en un intervalo mensual. Probaré tus sugerencias. ¡Gracias!
Hmm, así que he revisado y configurado el trabajo crontab de mi raíz de la manera que sugieres (gracias por señalar esos indicadores de sudo por cierto), aunque cuando escribo y salgo del crontab raíz todavía me da el mensaje crontab: no crontab for rooty no guarda el entrada de trabajo. Usted mencionó que puede ser un problema de permisos, ¿tiene alguna sugerencia sobre los permisos de qué archivo debo verificar? La idea de que el usuario raíz no tenga permisos para un archivo en particular parece extraña, ¿no?
Arrancaría desde otro disco y ejecutaría "Reparar permisos" en la Utilidad de Discos.

Estaba teniendo el mismo problema. Esto es lo que funcionó para mí (y por "funcionó" me refiero a que pude hacer que un trabajo cron se ejecutara como root):

sudo bash -login            # su always tries to force me to change my password >:[
vi /usr/lib/cron/tabs/root  # Just edit it directly

chmod 600 /usr/lib/cron/tabs/root

Los trabajos que coloque allí se ejecutarán, pero crontab -eaún no funcionan, incluso después de crear el crontab.