Según el seguimiento de mi estado de replicación de MySQL. Escribí un script de shell simple con el siguiente código
#!/bin/bash
date > /tmp/mysql_repl_status.txt
cd /usr/bin/
"/usr/bin/mysql" "-e" "SHOW SLAVE STATUS \G" >> /tmp/mysql_repl_status.txt
mail -s "Netspective MySQL replication status" [email protected] < /tmp/mysql_repl_status.txt
El problema es que cuando ejecuto este script manualmente funciona bien, pero al usar cron el script no funciona.
Al usar cron, recibí el correo solo con la salida del comando de fecha. ¿Qué le pasa a mi lado?
Respuesta1
Varias posibilidades:
Cron no pasa un entorno de usuario completo a los scripts que se ejecutan en cron. Por lo tanto, variables como $PATH pueden ser diferentes si se ejecutan bajo cron que si se ejecutan en una terminal de usuario.
Cron requiere una nueva línea al final de cada línea, por lo tanto, mantenga siempre una línea en blanco al final del archivo crontab.
Tal vez especifique las rutas completas en el script y vea si funciona para empezar.
#!/bin/bash
statfile=/tmp/mysql_repl_status.txt
/bin/date > $statfile
cd /usr/bin
/usr/bin/mysql -e "SHOW SLAVE STATUS \G" >> $statfile
/bin/mail -s "Netspective MySQL Replication Status" [email protected] < $statfile
Respuesta2
Los trabajos cron se ejecutan con muy poco contexto. Si tiene un .my.cnf
archivo en su directorio de inicio, podría contener los detalles de autenticación necesarios para que el mysql
comando funcione. Probablemente también necesite la ruta completa para mail
ver qué which mail
se imprime.
Respuesta3
En lugar de escribir la ruta completa para cada comando, sería útil establecer PATH
una variable en el archivo de secuencia de comandos.
#!/bin/bash
export PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
date > /tmp/mysql_repl_status.txt
cd /usr/bin/
"/usr/bin/mysql" "-e" "SHOW SLAVE STATUS \G" >> /tmp/mysql_repl_status.txt
mail -s "Netspective MySQL replication status" [email protected] <
/tmp/mysql_repl_status.txt`
Respuesta4
usarbash -l -c
p.ej:
* * * * * bash -l -c '/dsds/fddfd/something.sh' > /tmp/something.log