我一直在摸不着头脑。 我有一个由root cron作业运行的脚本。 脚本执行,但脚本中有一个脚本不会执行。 以下是我们称之为scriptA
的内容#!/bin/bash
lines=`wc -l < /var/www/log/addme`;
DATE=`date +%Y-%m-%d`
if [[ $lines > 4 ]];
then
echo " " > /var/www/log/addme
RESTART=/var/www/log/restart.sh
$RESTART
else
echo "No new hosts added" | wall
fi
基本上,restart.sh脚本的作用是重启服务。 当我从终端运行它们时,一切正常,但不是作为cron的工作...... 我也试着把
./restart.sh
/var/www/log/restart.sh
但结果相同。 有什么想法吗?
答案 0 :(得分:2)
我怀疑你遇到了cron运行其工作的最小环境问题。最重要的是PATH非常小,而且你的脚本可能正在使用一些无法找到的命令。
如果这是问题,有几种方法可以解决它:最简单的方法是在运行脚本的条目之前,在crontab文件中添加适当的PATH定义。像这样:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
0 * * * * /var/www/log/scriptA
第二种是在scriptA的开头添加一个类似的赋值。第三个选项是遍历这两个脚本,并使用您使用的所有命令的完整路径(例如/usr/bin/wc
而不仅仅是wc
)。
BTW,测试[[ $lines > 4 ]]
也存在问题 - 在[[ ]]
内,>
执行字符串(字母)比较,而不是数字比较。这是一个问题,因为按字母顺序,10小于4.使用[[ $lines -gt 4 ]]
或(( lines > 4 ))
进行数字比较。