El script Perl no se ejecuta correctamente en crontab o shell script

El script Perl no se ejecuta correctamente en crontab o shell script

Tengo un script Perl (que vino con mi software de marcador Vicidial) que se ejecuta perfectamente en la línea de comandos de Linux. Envía un correo electrónico al final del script.

El script no crea ningún error y todo el script hasta el sendmail (https://metacpan.org/pod/Mail::Enviar correo) funciona correctamente cuando se ejecuta en crontab y en un ejecutable de script de shell (que se ejecuta como root), sin embargo, el correo electrónico no se envía.

¿Cuál es la diferencia entre ejecutar el script en un ejecutable de bash y en una CLI de bash? La función sendmail no arroja ningún error, ¿por qué simplemente no se envía?

Aquí hay dos fragmentos de código relevantes del script Perl:

use MIME::QuotedPrint;
use MIME::Base64;
use Mail::Sendmail;
if (length($attachment)>0) {
    #print $mail{body};
    sendmail(%mail) or die $mail::Sendmail::error;
    #print "error: ";
    #print $mail::Sendmail::error;
}

Así es como ejecuto el script:

/usr/share/astguiclient/AST_email_web_report.pl --email-subject=XXXX--email-list=XXXX --email-sender=XXXX --date=XXXX

Respuesta1

En términos generales, "funciona en el shell de un usuario, pero no desde crontab(o en el shell de otro usuario)" significa que el problema se debe a que el programa depende de la configuración del entorno (muy a menudo PATH) que el primer usuario tiene implementada, pero que son diferentes. o falta en el cronentorno y en el shell del otro usuario.

Si estuviera en la situación que usted describe, lo primero que haría es revisar el código Perl, porque Perl es lo mío, y luego pondría un print "Back from sendmail\n";comando inmediatamente después de sendmail(%mail) or die, solo para estar absolutamente seguro de que el programa no está salir silenciosamente al intentar enviar el correo. Pero supongo que probablemente ya hayas cubierto esas bases lo mejor que puedas.

Lo siguiente, entonces, es ejecutar el envcomando en el shell para el que funciona y revisar el resultado de cualquier configuración que parezca relevante, luego intentar trasplantar esas configuraciones al entorno de shell de root para ver si reciben el correo. trabajando alli. Una vez que haya identificado las configuraciones que lo hacen funcionar para root, también puede poner esas mismas configuraciones en el crontabarchivo y esto también debería arreglarse.

Otra vía que podría investigar sería consultar tail -fel registro de su servidor de correo para ver si podría estar recibiendo el mensaje y luego descartándolo (o rebotándolo), pero eso parece una posibilidad un poco remota y requiere que tenga acceso al correo apropiado. registros del servidor. Los problemas ambientales parecen mucho más probables, a menos que reciba rebotes de intentos fallidos de correo. (¡Revise el buzón de correo de root si aún no lo ha hecho!)

Respuesta2

Descubrí un error en el script proporcionado que permitía activar una opción cuando no debería haberlo estado. Ahora todo funciona con normalidad.

información relacionada