Forums:
Muy buenas compañeritos de este foro, tengo un problemita que he tratado de solucionarlo pero no lo he logrado aun, les explico de que se trata. Miren Tengo desarrollado dos script el primero llamado principal.sh en donde parte de su codigo es la llamada a otro script llamado envio_mail.sh
#!/bin/bash
# Nombre del script: principal.sh
... #codigo
#llamada al script envio_mail.sh
./envio_mail.sh
... # mas codigo
tanto los script principal.sh como envio_mail.sh se ejecutan cuando mando la instruccion desde el terminal
myterminal#./principal.sh
el problema surge cuando lo hago que se ejecute de manera automatico, haciendo uso del crontab. de modo que al programar la tarea como se indica mas abajito este no se ejecuta
30 12 * * * /path_del_script_principal.sh
he probado dando los respectivos permisos a cada uno de los script, tambien he sido muy cuidadoso en el path en donde se encuentra el script principal.sh
Cuando llega el tiempo de ejecutar la tarea ejecuta principal.sh pero la parte de la llamada al script envio_mail.sh no se ejecuta. Espero haberme explicado con claridad, si alguien de ustedes me puede ayudar de ante mano estare muy agradecido,...
Bastante raro, debería poder
Bastante raro, debería poder correr sin problema, sin embargo te hago un par de acotaciones que se me vienen a la mente talvez pueda ayudar.
- Es probable que tengas variables dentro del código por lo que sugiero hagas un export de las mismas, probablemente al correr el segundo script tome alguna variable y simplemente no la reconozca.
- Asegurate de que cuando envies a correr el segundo script poner el path completo.
Espero haber aportado un poco a la solución que buscas.
Saludos,
Hola amigo, ya probe y no es
Hola amigo, ya probe y no es cuestion de las variables, cuando desde el terminal digito:
mypromt#./principal.sh
se ejecuta tanto principal.sh como el script envio_mail.sh Sin embargo cuando programo la tarea desde el cron el script envio_mail.sh no se ejecuta no se por que.
En cuanto al cron aqui no defino el path del script envio_mail.sh sino unicamente el principal.sh ya que es este quien ejecuta envio_mail.sh
no se si talvez sea problemas de permisos al usar el crontab...
Con todo amigo gracias por su interes, voy a seguir haciendo pruebas, solo que ya no se me ocurre que mas hacer :( , si me dan alguna idea, bienvenida sea... :)
edisonjavier85
Intenta ejecutando el cron
Intenta ejecutando el cron enviando el error a un archivo para que puedas ver con exactitud porque no se ejecuto el segundo script.
30 12 * * * sh $HOME/principal.sh 2>&1 > $HOME/error.txt
Luego revisas el error.txt y verifica cual es el motivo real.
Saludos,
Hola amigo, la verdad ya hice
Hola amigo, la verdad ya hice lo que me recomendaste mandando la salida al archivo error.txt
pero Dios mio, no hay ningun error, me sale todo lo que me sale cuando lo hago desde el terminal, al parecer esta todo correcto. pero sigo sin lograr que el script envio_mail.sh corra.
Mira dejo el codigo de mi script envio_mail.sh espero puedas ayudarme con alguna otra idea....
#!/bin/bash
##################################################################################################
#Nombre: envio_mail.sh
#Descripción: Script para realizar el envío de un e-mail a las direcciones de correo de los
# de los administradores de la red de la empresa ADELCA C.A. en base a la información
# obtenida del monitoreo de la red.
#Autores:Juan Carlos Gualotuña,Edison Cando
#Fecha Creación: 2009/09/21
##################################################################################################
#Conexion a la Base de datos
typeset -a VECTOR
SQL_HOST=localhost
SQL_USER="root"
SQL_PASSWORD="redesadelca"
SQL_DATABASE="adelca"
SQL_ARGS="-h $SQL_HOST -u $SQL_USER -p$SQL_PASSWORD -D $SQL_DATABASE -s -e"
#Email del administrador de turno
email=$(mysql $SQL_ARGS "select email from ad_usuarios where turno='S';")
#Mensajes a enviar via email
id_mensaje=$(mysql $SQL_ARGS "select id_envio from ad_registro_envio where est_env_email = 'N' and est_env_usuario is null;")
for i in $id_mensaje
do
VECTOR=$(mysql $SQL_ARGS "select des_mensaje from ad_registro_envio where id_envio='$i';")
for mensaje in "${VECTOR[@]}"
do
#Armado de la estructura del mensaje a ser enviado
echo $mensaje | awk 'BEGIN {FS = ";"} {printf "Subject:SISTEMA DE MONITOREO SMADEL\n"} {print "\n",$1,"\n",$2,"\n",$3,"\n",$4}'> /tmp/mail_salida.txt
#Envio del email
ssmtp $email < /tmp/mail_salida.txt
done
#Actualizacion registro envio
mysql $SQL_ARGS "update ad_registro_envio set est_env_email='S', des_estado='ENVIADO' where id_envio=$i and est_env_usuario is null;"
done
Este el codigo de mi script que como veras la parte que dice
ssmtp $email < /tmp/mail_salida.txt
no se esta ejecutando. Como te dije es algo extranio por que cuando uno manda el script principal.sh desde el terminal el script envio_mail.sh se ejecuta (al decir que se ejecuta me refiero a que en mi buzon de correo electronico me ha llegado el mensaje que me debia llegar) sin embargo cuando lo programa en el crontab asi
30 12 * * * /path_al_script_principal.sh
el email que supuestamente debe llegar a mi correo nunca llega..
ahora he estado probando esto de diferentes maneras primero por partes es decir ejecutando primero desde el terminal el script principal.sh que lo unico que hace es setearme el valor de N en una tabla de una base de datos que manejo. luego mando a ejecutar por separado el scrip envio_mail y pues este no hace el envio del mail ni las actualizaciones a la tabla. Algo que me he percatado es que cuando mando a ejecutar desde el crontab el script principal.sh el script envio_mail.sh aparentemente hace parte de toda su tarea es decir obtiene los valores de la tabla y los actualiza, pero como te dije la parte de
ssmtp $email < /tmp/mail_salida.txt
no funciona......
amm con todo muchas Gracias y si tienes alguna otra sujerencia muy bienvenida sera..
edisonjavier85
Cita: #!/bin/bash # Nombre
[quote]#!/bin/bash
# Nombre del script: principal.sh
... #codigo
#llamada al script envio_mail.sh
./envio_mail.sh
... # mas codigo[/quote]
Mira la llamada al script del mail ....
./envio_mail.sh
reemplaza por el path completo al script o has antes un cd ;)
/path_al_fucking_archivo/envio_mail.sh
o
cd /path_al_fucking_archivo
./envio_mail.sh
bye
;)
Hola Estimado DeathUser
Hola Estimado DeathUser primeramente agradeciendo por su aporte, cuando hago la llamada al script si especifico el path mediante
cd /Path_al_script
./envio_mail.sh
Tambien lo probe haciendole de la otra forma
/Path_al_script/envio_mail.sh
Cuando se hace la llamada al script principal.sh desde el terminal y este que a su vez llama al script envio_mail.sh pues lo ejecuta sin ningun problema. el problema es que cuando lo hago desde el crontab el script envio_mail.sh no hace completamente su trabajo. he hecho lo que suttilakha me ha recomendado pero al parecer no hay error. Seguire pensando en que esta mal, si por alli tienes alguna otra sugerencia pues bienvenido sea y muchas gracias nuevamente ....
edisonjavier85
PROBLEMA SOLUCIONADO..... Ya
PROBLEMA SOLUCIONADO.....
Ya encontre cual era el problema resulta pues que cuando se usa el crontab y cuando se programa una tarea mediante un script, los comandos que se empleem en este script no son reconocidos por el Crontab, Asi que la solucion fue , saber donde se encontraba el comando que yo utilizaba para el envio del mail... el cual lo saque mediante...
which ssmtp
lo que me dio como resultado
/usr/sbin/ssmtp
y pues eso hay que especificar en el scrip, puesto que cuando sea ejecutado por el crontab no haya el problema,.....
Bueno me Despido sin antes darles mis mas sinceros Agradecimientos a suttilakha y DeathUser por su gentin tiempo en ayudarme y su aporte que me dieron, GRACIAS...!!
edisonjavier85
Eso, o también agregar el
Eso, o también agregar el path en el archivo del crontab, mira el man del crontab, tienes muchas configuraciones útiles...
Que bien que lo solucionaste ...
bye
;)