Скрипт Bash с sendmail доставляет электронную почту при выполнении вручную, но не из crontab - PullRequest
0 голосов
/ 13 декабря 2018

Я написал следующий скрипт bash, чтобы отправить мне предупреждение, если есть проблема с моим веб-сайтом:

#!/bin/bash

# 1. download the page
BASE_URL="https://www.example.com/ja"

JS_URL="https://www.example.com/"

# # 2. search the page for the following URL: /sites/default/files/google_tag/google_tag.script.js?[FIVE-CHARACTER STRING WITH LETTERS AND NUMBERS]

curl -k -L ${BASE_URL} 2>/dev/null | grep -Eo "/sites/default/files/google_tag/google_tag.script.js?[^<]+" | while read line
do
    # 3. download the js file
    if curl -k -L ${JS_URL}/$line | grep gtm_preview >/dev/null 2>&1; then
       # 4. check if this js file has the text "gtm_preview" or not; if it does, send an email
       # echo "Error: gtm_preview found"
       sendmail error-ec2@example.com < email-gtm-live.txt
    else
      echo "No gtm_preview tag found."
    fi
done

Я запускаю это из экземпляра Amazon EC2 Ubuntu.Когда я выполняю сценарий вручную, например ./script.sh, я получаю сообщение электронной почты в почтовом ящике веб-почты на example.com.

Однако, когда я настраиваю этот сценарий для запуска через crontab, почта не отправляется черезИнтернет;вместо этого он отправляется на /var/mail в экземпляре EC2.

Я не понимаю, почему это происходит или что я могу сделать, чтобы это исправить.Почему sendmail ведет себя по-разному, если он запускается из bash, а не из crontab?

1 Ответ

0 голосов
/ 14 декабря 2018

Имейте в виду, что переменная окружения PATH отличается для выполнения crontab от обычных типичных интерактивных сеансов.Кроме того, не все переменные среды установлены.Попробуйте указать полный путь к исполняемому файлу sendmail (который вы можете узнать, выполнив команду which sendmail).

...