在shell脚本中执行shell脚本

时间:2012-11-07 17:53:57

标签: bash shell

我一直在摸不着头脑。 我有一个由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

但结果相同。 有什么想法吗?

1 个答案:

答案 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 ))进行数字比较。

相关问题