Cron: Mis crontabs no parecen estar haciendo nada

Creo que me estoy perdiendo algo. He configurado algunos crontabs para manejar rsyncs a través de ssh en mi oficina para manejar algunas copys de security, pero parece que no se están ejecutando O registrando, para el caso. ¿Me estoy perdiendo de algo?

Aquí están mis crontabs:

0 2 * * * idealm /usr/bin/local/rsync -avz --rsync-path=/usr/bin/rsync -e ssh /Ideal\ Machinery\ Database/* i@192.168.0.210:~/db_backup >> /home/idealm/Work/cron_log.txt

^ desde el mini server Mac al server SME

0 2 * * * i /usr/bin/rsync -avz --rsync-path=/usr/local/bin/rsync -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/Converted\ Warehouse\ Pictures/* idealm@192.168.0.194:/ideal_img >> /home/i/cron_log.txt

^ del server SME al server Mac Mini

0 2 * * * i /usr/bin/rsync -rvz -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/* fm-backup@[remote server]:/home/fm-backup/img_all/ >> /home/i/cron_log.txt

0 2 * * * i / usr / bin / rsync -rvz -e ssh ~ / db_backup / * fm-backup @ [server remoto]: ~ / db_backup / >> /home/i/cron_log.txt

^ Del server SME a un server remoto que ejecuta Ubuntu 10.10 (donde [server remoto] es la dirección censurada)

El problema es que cuando ejecuto estos trabajos desde bash, todo funciona perfectamente: cron simplemente no parece funcionar. ¿Alguna sugerencia?

Primero intente algunos cronjobs simples y compilation desde aquí:

 0 12 * * * user echo 'Hello, World!' >> /tmp/test.log 2>&1 1 12 * * * user ssh anotheruser@anotherhost ls >> /tmp/test.log 2>&1 2 12 * * * user rsync -e ssh anotheruser@anotherhost:/path/to/small/dir /tmp/test-dir >> /tmp/test.log 2>&1 

Evite usar demasiadas opciones al principio, pero usar 2>&1 es importante para get cualquier post de error. También puede usar 2>/tmp/test-error.log para enviarlos a un file separado. Normalmente, cron genera un correo electrónico si, y solo si, hay algún resultado. Este correo se envía a la dirección de correo electrónico mencionada en la variable de entorno MAILTO configurada en crontab o al usuario local de Unix, el trabajo se ejecuta como si MAILTO no estuviera configurado. Si no tiene un server de correo instalado o no está seguro de cómo acceder a él, puede networkingirigir todo el resultado a un file. Otra cosa a mirar es establecer SHELL. De forma pnetworkingeterminada, cron usa / bin / sh, que normalmente está bien, e incluso puede ser un enlace simbólico a / bin / bash en algunos sistemas, pero si no lo hace y espera usar bash-isms en su command, puede agregar SHELL=/bin/bash o lo que sea apropiado antes de sus listdos de trabajo.

Otro problema que puedo ver con los crontabs anteriores es espacios. Dado que los commands funcionan en un shell normal, probablemente no es el problema, pero tenga cuidado al usar espacios cuando use ciertos commands ssh remotos como: ssh server ls "Music Videos" , los espacios en dichos commands deben escapingse por duplicado debido a la hecho de que tanto el shell local como el shell remoto pueden interpretarlos. El command correcto debería ser algo como esto: ssh server ls "Music\\ Videos" o ssh server ls '"Music Videos"'

Lo último que puedo pensar es que ssh está fallando la authentication. Supongo que está utilizando authentication de key pública. ¿Dónde se almacena tu key pública? ¿Está en ~/.ssh/id_rsa como una key privada no encriptada, o la tienes cargada en un agente de key pública SSH? Si se carga en un agente porque la copy en el disco está encriptada, deberá asegurarse de que SSH_AUTH_SOCK se configure manualmente en crontab para apuntar a un agente que se ejecutará cuando rsync lo haga. Normalmente guardo mis keys privadas cifradas en el disco y mantengo ssh-agent ejecutándose en segundo plano con una ruta de socket fija. Por ejemplo, ejecuto ssh-agent -a /tmp/user.agent seguido de SSH_AUTH_SOCK=/tmp/user.agent ssh-add .ssh/id_rsa para cargar la key privada al agente. Tengo estos dos commands en una secuencia de commands que ejecuto manualmente después de cada reinicio, ya que necesito ingresar una frase de contraseña para desbloquear la key privada. Luego tengo SSH_AUTH_SOCK=/tmp/user.agent en mi file crontab para que mis cronjobs automáticos utilicen.