【发布时间】:2015-04-27 15:25:07
【问题描述】:
我创建了以下 linux 脚本:
#!/bin/sh
tempfront=27
tempreartop=60
temprearbottom=65
if [ "$tempfront" -gt 26 ] || [ "$tempreartop" -gt 70 ] || [ "$temprearbottom" -gt 70 ]; then
echo "To: myemail@mail.com
From: myotheremail@gmail.com
Subject: Test Alert
ALERT
Front temp: $tempfront oC
Back temp up: $tempreartop oC
Back temp down: $temprearbottom oC" > /home/odroid/alerts.txt
ssmtp myemail@mail.com < /home/odroid/alerts.txt
fi
我手动执行此脚本并且工作正常,它将电子邮件警报发送到 myemail@mail.com。以下是 gmail 发送的内容:
Return-Path: <myotheremail@gmail.com>
Received: from myotheremail@gmail.com
(ppp046177171064.abcs.fe. [xx.xx.xx.xx])
by mx.google.com with ESMTPSA id k2sm8590878wix.4.2015.04.26.12.54.57
for <myemail@mail.com>
(version=TLSv1 cipher=RC4-SHA bits=128/128);
Sun, 26 Apr 2015 12:54:59 -0700 (PDT)
Message-ID: <d04e@mx.google.com>
Received: by myotheremail@gmail.com (sSMTP sendmail emulation); Sun, 26 Apr 2015 22:54:56 +0300
Date: Sun, 26 Apr 2015 22:54:56 +0300
To: myemail@mail.com
From: myotheremail@gmail.com
Subject: Test Alert
ALERT
Front temp: 27 oC
Back temp up: 60 oC
Back temp down: 65 oC
但是当我将它设置为在 cron 作业中运行时,电子邮件会像这样损坏:
.....
From: root <myotheremail@gmail.com>
X-Google-Original-From: root (Cron Daemon)
Received: by myotheremail@gmail.com (sSMTP sendmail emulation); Sun, 26 Apr 2015 23:00:01 +0300
Date: Sun, 26 Apr 2015 23:00:01 +0300
To: root
Subject: Cron <root@odroid> /home/odroid/testalert.sh >/dev/null
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
/home/odroid/testalert.sh: 19: /home/odroid/testalert.sh: ssmtp: not found
而且 myemail@mail.com 也没有收到它。 有人可以解释一下吗?为什么 cron 搞砸了?
更新: 我注意到其他一些 cron 作业也输出到电子邮件!
...
Date: Mon, 27 Apr 2015 06:30:01 +0300
From: Cron Daemon <myotheremail@gmail.com>
To: root
Subject: Cron <root@odroid> /home/odroid/motion_day.sh >/dev/null
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
[0] Processing thread 0 - config file /etc/motion/motion.conf
[0] Motion 3.2.12 Started
[0] Motion going to daemon mode
这只是一个用于网络摄像头监控的脚本,与电子邮件无关! cron 条目是
30 6 * * * /home/odroid/motion_day.sh >/dev/null
【问题讨论】:
-
另外,你有没有使用 which ssmtp 来找到推荐的完整路径?在我的 Raspberry Pi 上,它告诉我它是 /usr/sbin/ssmtp
-
你检查过 cron 中可用的 $PATH 吗?为了找出答案,我在 cron 中运行了这个:echo $PATH | /usr/sbin/ssmtp myusername@gmail.com
-
我在接受的答案中看到@mata 找到了路径 - 非常聪明。