svn | awk | el correo funciona en bash, pero no en el trabajo cron

Tengo el siguiente command para mostrar los cambios en un repository de subversión

svn log -v -r{$(date +%Y-%m-%d)}:HEAD http://therepository | awk '/^r[0-9]+ / {user=$3} {if (user=="username") {print $1 $2 $3}}' | mail -ne -s'Users SVN commits' email@email.com 

Funciona bien en la línea de command.

Cuando lo pego en un crontab, aparece el siguiente post de error:

 /bin/sh: -c: line 0: unexpected EOF while looking for matching `)' /bin/sh: -c: line 1: syntax error: unexpected end of file 

¿Cómo se debe citar para que funcione?

Al usar cron, evite la molestia de tales problemas poniendo todo en un script de shell, luego llame al script de shell desde cron.

Este enfoque se usa comúnmente y es una buena idea porque:

  • Hace que tu command sea fácilmente comprobable (no tienes que hacer cosas estúpidas como progtwigr una ejecución en un minuto)
  • Fácil de invocar manualmente si es necesario, por ejemplo, en caso de que la tarea falle, las operaciones pueden volver a ejecutarse sin tocar crontab; también se pueden invocar trabajos de otros trabajos, por ejemplo, un trabajo final que verifica si todos los trabajos funcionan bien y vuelve a ejecutarlos eso no
  • Separa lo que se ejecuta desde que se ejecuta, dejando que cron haga (solo) lo que hace mejor: progtwigr
  • Le da acceso completo a las características del script de shell, o el uso de diferentes shells como perl
  • Mantiene crontab limpio y fácil de leer
  • Cualquier persona que desarrolle / mantenga tareas cron sabe dónde search si usa un directory coherente para las tareas cron (por ejemplo, / opt / cron o lo que sea)
  • Puede poner sus tareas cron bajo control de código fuente: con demasiada frecuencia, las secuencias de commands de shell se pasan por alto para el control de origen, pero son código y, por lo tanto, se benefician del control de código fuente.

Por ejemplo:

 dosomething.sh: svn log -v -r{$(date +%Y-%m-%d)}:HEAD http://therepository | awk '/^r[0-9]+ / {user=$3} {if (user=="username") {print $1 $2 $3}}' | mail -ne -s'Users SVN commits' email@email.com 

más

 cron 0 22 * * * /opt/cron/dosomething.sh 

Lo más fácil sería savelo como un script bash, y luego ejecutar el script desde cron.

(Hubiera hecho de esto un comentario en lugar de una respuesta, pero SO no me deja comentar)

joe