Скрипт Perl не выполняется должным образом в скрипте crontab или shell

Скрипт Perl не выполняется должным образом в скрипте crontab или shell

У меня есть скрипт Perl (который идет с моим программным обеспечением для набора номера Vicidial), который отлично работает в командной строке Linux. Он отправляет электронное письмо в конце скрипта.

Скрипт не создает никаких ошибок и весь скрипт вплоть до sendmail (https://metacpan.org/pod/Mail::Отправить почту) функция работает правильно при запуске в crontab и в исполняемом файле скрипта оболочки (запущенном от имени root), однако электронное письмо не отправляется.

В чем разница между запуском скрипта в исполняемом файле bash и bash CLI? Функция sendmail не выдает никаких ошибок, почему бы ей просто не отправлять?

Вот два соответствующих фрагмента кода из скрипта 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;
}

Вот как я запускаю скрипт:

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

решение1

В общем случае, «работает в оболочке одного пользователя, но не работает crontab(или не работает в оболочке другого пользователя)» означает, что проблема вызвана тем, что программа полагается на настройки среды (очень часто PATH), которые установлены у первого пользователя, но отличаются или отсутствуют в cronсреде и оболочке другого пользователя.

Если бы я оказался в ситуации, которую вы описываете, первое, что я бы сделал, это проверил код Perl, потому что Perl — это моя стихия, а затем я бы поместил команду print "Back from sendmail\n";сразу после sendmail(%mail) or die, просто чтобы быть абсолютно уверенным, что программа не завершается молча при попытке отправить почту. Но я предполагаю, что вы, вероятно, уже рассмотрели эти основы настолько хорошо, насколько это возможно.

Следующее, что нужно сделать, это запустить envкоманду в оболочке, для которой она работает, и просмотреть вывод на предмет любых настроек, которые кажутся релевантными, затем попытаться перенести эти настройки в среду оболочки root, чтобы посмотреть, заставят ли они почту работать там. Как только вы определите настройки, которые заставляют ее работать для root, вы также можете поместить эти же настройки в файл, crontabи это тоже должно исправиться.

Другой путь, который вы могли бы исследовать, — это проверить tail -fжурнал вашего почтового сервера, чтобы узнать, получает ли он сообщение, а затем отбрасывает (или возвращает), но это кажется немного маловероятным и требует доступа к журналам соответствующего почтового сервера. Проблемы со средой кажутся гораздо более вероятными, если только вы не получаете возвраты из-за неудачных попыток отправки почты. (Проверьте почтовый ящик root на наличие таковых, если вы еще этого не сделали!)

решение2

Я обнаружил ошибку в предоставленном скрипте, которая позволяла включить опцию, когда ее не должно было быть. Теперь все работает нормально.

Связанный контент