我编写了以下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会有不同的表现?
答案 0 :(得分:1)
请注意,crontab执行的PATH环境变量与典型的交互式会话不同。另外,并非所有相同的环境变量都被设置。考虑为sendmail可执行文件指定完整路径(您可以通过发出“ which sendmail”命令来学习)。