Shell脚本在crontab上无法正常工作,在手动调用时可以正常工作

Pet*_*ter 2 variables shell crontab sh

我在Solaris 5.8下有一个脚本,它没有按预期工作,并且不知道为什么......

该脚本从文件中读取URL列表,使用curl测试它们并将输出写入日志文件:

#!/bin/sh

# Logs path
LOG_DIR=/somedir/logs

# URLs file path
URL_FILE=/somedir/url

# Actual date
DATE=`date +%Y%m%d%H%M`

# CURL
CURL=/somedir/bin/curl

test_url()
{
    cat $URL_FILE | grep -i $1 | while read line
    do
        NAME=`echo $line | awk '{ print $1 }'`
        URL=`echo $line | awk '{ print $2 }'`
        TIME=`$CURL -s -o /dev/null -w %{time_total} $URL`
        echo "$DATE $TIME" >> $LOG_DIR/${NAME}_${1}.log
    done
}

test_url someurl
test_url someotherurl
Run Code Online (Sandbox Code Playgroud)

URL_FILE具有以下布局:

somename1 http://someurl/test
somename2 http://someotherurl/test
Run Code Online (Sandbox Code Playgroud)

该脚本从文件加载URL,然后使用curl获取URL加载所需的总时间,然后打印日期和时间(以毫秒为单位).我发现的问题是,TIME当在crontab内部调用时,变量不起作用,但是在用户自己调用时它会发生:

# Output when called with the user ./script.sh
201202201018 0.035
# Output when called from crontab.
201202201019
Run Code Online (Sandbox Code Playgroud)

如果我重定向所有输出* * * * * /path/to/script/script.sh 1&2 > /tmp/output,则输出文件为空.

此外,我还没有在/ var/log/syslog中看到任何关于它的输出.TIME通过crontab调用变量无法正确显示的任何线索?

And*_*ist 5

你应该看看的东西:

  1. /path/to/script/script.sh 1&2 > /tmp/output在你的cron有效吗?在我的机器上,它将运行带有参数"1"的脚本并尝试找到一个名为"2"的程序来运行它.如果找不到它,它会创建一个空的输出文件.我想你正在寻找类似的东西/path/to/script/script.sh >> /tmp/output 2>&1
  2. 你是否设定CURL了完整的卷曲路径?Cron通常没有相同的路径信息.
  3. 你用哪个用户来运行cron?是否存在卷曲或网络的访问限制?
  4. 如果它是用crontab编写的,那么cron确实会对它进行不同的处理.它意味着换行,否则应该被转义.你是否直接在cron中使用curl运行测试?只要你把它保存在你的脚本中就应该没问题.