problemas al ejecutar script..

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

Imagen de edisonjavier85

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

Imagen de edisonjavier85

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

Imagen de deathUser

[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

Imagen de edisonjavier85

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

Imagen de edisonjavier85

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