带有sendmail的Bash脚本在手动执行但不是从crontab执行时会发送电子邮件

时间:2018-12-13 12:33:11

标签: bash cron sendmail

我编写了以下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一样手动执行脚本时,我在Webmail收件箱中收到了一封example.com的电子邮件。

但是,当我将此脚本配置为通过crontab运行时,邮件不会通过Internet发送。而是将其发送到EC2实例上的/var/mail

我不明白为什么会这样,或者我可以做些什么来解决它。为什么从bash和crontab运行sendmail会有不同的表现?

1 个答案:

答案 0 :(得分:1)

请注意,crontab执行的PATH环境变量与典型的交互式会话不同。另外,并非所有相同的环境变量都被设置。考虑为sendmail可执行文件指定完整路径(您可以通过发出“ which sendmail”命令来学习)。