我有一个 cron 计划的 bash 脚本,我发现它有奇怪的行为。正如标题所示,在脚本运行后,有一个变量要么为空,要么不为空,具体取决于 cron 计划。如果我每分钟用* * * * *
或运行一次*/1 * * * *
,变量就会被填充并且脚本可以工作。每 5 分钟、10 分钟或 15 分钟一次也是如此。一旦我使用 as 将其移至 30 分钟,*/30 * * * *
或者使用 移至每小时顶部0 * * * *
,变量就为空。
除了在将变量的值附加到同一文件之前将“日期”的输出附加到文件之外,脚本本身不以任何方式使用时间。
手动执行时该脚本按预期工作。我希望它每小时或每 30 分钟运行一次,但是当我在 cron 中仅进行这些更改时,脚本会失败并显示空变量。
我不知道 cron 频率如何以这种方式影响脚本。该脚本是静态的。只有 cron 条目发生了变化。有想法吗?提前致谢。
脚本:
#!/bin/bash
# declare variables
resultsdir="/share/CACHEDEV1_DATA/Ian/Documents/IT/Speedtest"
dl="00.00"
#run the download speedtest and grep the Mbit/s result into $dl
dl=$(speedtest --no-upload | grep bit)
#if the $dl variable is empty notify and exit
if [ -z "$dl" ]
then
/sbin/notice_log_tool -a "Speedtest failed due to empty dl variable" --severity=6
exit
else
:
fi
#append the date and time to speedtest.txt
date>>$resultsdir/speedtest.txt
#append the download speed after the date to speedtest.txt
echo $dl>>$resultsdir/speedtest.txt
#append the speedtest Mbit/s numerics to speedtest_numerics.txt
echo $dl | tr -d ' aA-zZ:/'>>$resultsdir/speedtest_numerics.txt
#notify of script completion
/sbin/notice_log_tool -a "Speedtest completed - ${dl}." --severity=6
exit
工作 cron 条目示例:
* * * * * /share/CACHEDEV1_DATA/TFTP/Scripts/speedtest.sh >/dev/null 2>&1
失败的 cron 输入示例:
*/30 * * * * /share/CACHEDEV1_DATA/TFTP/Scripts/speedtest.sh >/dev/null 2>&1
$dl
成功运行期间 grep 的 var 匹配内容的示例:
Retrieving speedtest.net configuration...
Testing from ISP (IP)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by ISP [response]
Testing download speed...
Download: X Mbit/s
$dl
当作业运行于0 * * * *
or时,var 中会包含什么内容*/30 * * * *
:
Retrieving speedtest.net configuration...
Testing from ISP (IP)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
speedtest
根据我对完整的定义,脚本在完成之前继续。也许存在某种超时。全天只有大约 10 个作业按小时或半小时运行,所以我不认为这是一个负载问题。性能指标看起来不错。该盒子的主要工作是充当我的 NAS 和 Plex 媒体服务器,所以我想说它每天 95% 的时间都是闲置的。没有预定的云备份等。
我已安排它每分钟运行一次,除了整点和半点外,它都会成功运行。
它可以以不同的方式安排,或者speedtest
可以重复运行,直到它获取下载指标,但这是一种解决方法,无需确定原因。