0

我一直在为此挠头。我有一个由根 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

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

4

1 回答 1

2

我怀疑您在 cron 运行其作业的最小环境中遇到了问题。最大的问题是 PATH 非常小,而且您的脚本可能正在使用一些找不到的命令。

如果这是问题所在,有几种方法可以解决它:最简单的方法通常是在运行脚本的条目之前将适当的 PATH 定义添加到 crontab 文件中。像这样的东西:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
0 * * * *       /var/www/log/scriptA

二是在scriptA开头添加类似的赋值。第三种选择是浏览这两个脚本,并为您使用的所有命令使用完整路径(例如/usr/bin/wc,而不是只是wc)。

顺便说一句,测试也存在问题[[ $lines > 4 ]]——在里面[[ ]]>进行字符串(字母)比较,而不是数字比较。这是一个问题,因为按字母顺序,10 小于 4。使用[[ $lines -gt 4 ]](( lines > 4 ))进行数字比较。

于 2012-11-07T18:39:38.097 回答