Script no funciona bien ejecutándose con cron

Imagen de zzeratul

Forums: 

Estimados,

Tengo el siguiente problema:

Tengo el usuario "mysqlmonitor":

[root@localhost ~]# id mysqlmonitor
uid=502(mysqlmonitor) gid=503(mysqlmonitor) groups=503(mysqlmonitor),27(mysql),502(operadores)

En el home del usuario mysqlmonitor tengo el script "mysql_status.sh":
#!/bin/bash
sudo /etc/init.d/mysqld status
estado=$?
if [ $estado -ne 0 ]
then
home="/home/mysqlmonitor"
archivo="problema_mysql_status.txt"
echo "La Base de Datos no se encuentra Disponible" >> $home/$archivo
cat $home/$archivo | mail -s "LA BASE DE DATOS MYSQL NO SE ENCUENTRA DISPONIBLE" usuario@dominio.com
fi

En el archivo sudoers tengo la línea:
mysqlmonitor ALL=(ALL) NOPASSWD: /etc/init.d/mysqld status

Y en el cron del usuario mysqlmonitor tengo:
* * * * * /home/mysqlmonitor/mysql_status.sh

---------------

El problema es que cuando ejecuto el script manualmente como el usuario mysqlmonitor:
[mysqlmonitor@localhost ~]$ ./mysql_status.sh

No hay ningún problema. Si el servicio está activo, no se envía la alarma por correo. Si el servicio está desactivado, la alarma se envía al correo especificado. Es decir todo OK.

PERO cuando lo dejo ejecutando en el cron. Comienza a alertar enviando correo cada minuto, a pesar que MySQL está activo. No entiendo por qué sucede esto? Tienen alguna idea?.

Agradeceré mucho su ayuda.

Gracias.

El entorno en el que se

Imagen de deathUser

El entorno en el que se ejecuta el cron es distinto al entorno del usuario cuando está logueado al sistema.

En algunas ocasiones los programas requieren de un tty para ejecutarse correctamente y al ejecutarse vía cron no tienes tty y ese tipo de programas dan problemas, no digo que sea tu problema, en todo caso, agrégale log al script en cuestión y mira que es lo que está pasando, seguramente /etc/init.d/mysqld status no te está retornando el estado correcto o quizás no tienes a sudo en el path del cron, ese suele ser otro error comun en los scripts de cron, si no estás seguro, pon el path completo de cada comando usado o especifica el path explícitamente.

bye
;)

Creo que lo que te sucede es

Creo que lo que te sucede es que no se está ejecutando correctamente la línea de sudo. Por otro lado, si tienes el fichero en el home del usuario mysqlmonitor, entiendo que debe o debería de tener como propietario el fichero al mismo usuario no??

Puedes probar dos cosas:

1) Cambia en el fichero sudoers la línea:

mysqlmonitor ALL=(ALL) NOPASSWD: /etc/init.d/mysqld status

Por la siguiente línea:

mysqlmonitor ALL=NOPASSWD: /etc/init.d/mysqld status

2) Configurar el script en el cron del usuario mysqlmonitor no en root.

> crontab -u mysqlmonitor -e

* * * * * /home/mysqlmonitor/mysql_status.sh

ivanols