微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – Bash脚本在从shell提示符执行时产生的结果与cron执行的结果不同

请考虑以下crontab(root):

SHELL=/bin/bash
...
...
0 */3 * * * /var/maintenance/raid.sh

和bash脚本/var/maintenance/raid.sh:

#!/bin/bash

echo -n "Checking /dev/md0... "
if ! [ $(mdadm --detail /dev/md0 | grep -c "active sync") -eq 2 ]; then
    mdadm --detail /dev/md0 | mail -s "Raid problem /dev/md0" "my@email.com";
    echo "ERROR"
else 
    echo "ALL OK"
fi;

#-------------------------------------------------------

echo -n "Checking /dev/md1... "
...

而这就是…

…从shell提示符(bash)执行:

邮件与mdadm –detail / dev / md0输出发送到我的电子邮件(正确的行为)

…由cron执行:

空白邮件发送到我的电子邮件(主题在那里,但没有消息)

为什么会出现这种差异以及如何解决

解决方法:

in the comments所示,请在crontab脚本上使用完整路径,因为crontab确实具有与普通用户不同的环境变量(在本例中为root).

在你的情况下,/ sbin / mdadm代替mdadm.

如何获得命令的完整路径?使用以下命令:

$which rm
/bin/rm

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐