gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:17:58 25 4
gpt4 key购买 nike

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

该脚本从文件中读取 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

URL_FILE 具有以下布局:

somename1 http://someurl/test
somename2 http://someotherurl/test

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

# Output when called with the user ./script.sh
201202201018 0.035
# Output when called from crontab.
201202201019

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

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

最佳答案

您应该检查的事情:

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

关于Shell 脚本在 crontab 上无法正常工作,在手动调用时可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9358885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com