Pregunta: ¿Cuál es la razón por la que mi trabajo cron no se ejecuta cuando uso el porcentaje '%' en mi trabajo cron? ¿Cómo solucionar este problema?
Respuesta: '%' es el especificador de nueva línea en el comando cron. Por lo tanto, cuando usa %, se interpreta como una nueva línea en el trabajo cron. Veamos cómo superar este problema y usar % en el trabajo cron.
Definición de problema con ejemplo:'%' en el trabajo cron (trabajo cron no exitoso)
* * * * * date +"%d" >> /tmp/non-working-ex1.txt
Para fines de prueba, todos los campos en el ejemplo de crontab anterior tienen *. Esto ejecutará el cronjob especificado cada minuto.
Para comprender la configuración de crontab, lea nuestro artículo anterior que contiene 15 impresionantes ejemplos de trabajos cron.
Si tiene acceso a syslog verá una línea similar a la siguiente.
Jun 20 08:31:01 ubuntu-laptop /USR/SBIN/CRON[6752]: (ramesh) CMD (date +")
En la entrada de syslog para este ejemplo específico, el comando se muestra solo como:(fecha +”) . Idealmente, esto debería mostrarse como:fecha +”%d” . Esto indica que el porcentaje se analiza como un símbolo especial en el cron. es decir, finaliza el comando exactamente en el % de edad.
Solución con ejemplo:solución alternativa para usar '%' en el trabajo cron.
Puede resolver este problema utilizando los siguientes dos métodos. Esta solución debería resolver el problema en todas las versiones de Unix/Linux, incluidos Ubuntu, Debian, Fedora, RedHat, CentOS, AIX, etc.,
Método 1:escapar del porcentaje con \
Puede escapar del porcentaje con una barra invertida y hacer que funcione como un trabajo normal.
$ crontab -l * * * * * date +"\%M" > /tmp/working-ex1.txt
Nota: Este '\' no será visto por el comando de fecha, ni por ningún otro comando que invoques. El \ es para escapar del comportamiento especial de porcentaje en cron.
Método 2:Usar script de shell
Cree un script de shell con el comando de porcentaje y programe el script de shell como trabajo cron.
$ cat /bin/date.sh date +"%d" $ crontab -l * * * * * /bin/sh /bin/date.sh > /tmp/working-ex2.txt
En el siguiente minuto, tendrá la salida del comando ejecutado en /tmp/working-ex2.txt
Ahora tendrá la siguiente línea que ejecutó el comando con éxito en el syslog.
Jun 20 08:36:01 ubuntu-laptop /USR/SBIN/CRON[6962]: (ramesh) CMD (/bin/sh /bin/date.sh >> /tmp/working-ex2.txt)
Nota: No olvide eliminar estas entradas cron de prueba, ya que se ejecutarán cada minuto.
Si tuviste algún otro problema con el crontab, háznoslo saber en la sección de comentarios.