服务器:Ubuntu 20.04.2 LTS
命令:速度测试|速度测试-cli
我有一个 Bash 脚本来识别每个下载和上传速度15 分钟。当我手动执行它时,它运行良好,但在 cron 上却不行。
第一次,假设在 12:00 它正确执行,以下是输出
从 AT&T 服务(12.26.3.241)进行测试...
正在检索 speedtest.net 服务器列表...
根据 ping 选择最佳服务器...
由 AWI 网络(犹他州圣乔治)主办
测试下载速度.................................................................................
下载:*** Mbit/s
测试上传速度................................................................................
上传:*** Mbit/s
第二次,12:15:-
正在检索 speedtest.net 配置...
从 AT&T 服务(12.26.3.241)进行测试...
正在检索 speedtest.net 服务器列表...
根据 ping 选择最佳服务器...
当我检查用户的邮件时,出现以下错误:-
错误:无法连接到服务器来测试延迟。
答案1
同样的问题。似乎服务器在特定时间超载。我的 cron 表达式是
"0 /15 * 1/1 * ? *"
这样的,作业开始于:10:00、10:15、10:30...
我将 cron-expression 改为
"0 4/15 * 1/1 * ? *"
这样,工作开始的时间是:10:04、10:19、10:34...
帮我解决了这个问题。
亲切的问候
答案2
当同一个作业在命令行上工作时,cron 作业不起作用的典型原因是环境不同。你可以用下面的方法解决这个问题:
- 将您想要运行的命令放在脚本中,不要忘记添加shebang。
- 在您要运行的命令前添加一个 source 命令,以便加载您的 .bashrc 配置。
- 确保您的脚本是可执行的。
- 调整 cron 以使用脚本的完整路径运行脚本。
source /path/to/your/.bashrc
祝你好运!
答案3
尝试将以下标志添加到您的 .sh 脚本中,它解决了我的问题:
我的脚本运行速度测试:
#!/bin/bash
speedtest --accept-license --accept-gdpr >> /home/xxx/speedtesty/results
Crontab 条目:
/10 * * * * /bin/bash /home/xxx/speedtesty/run_speedtest.sh
答案4
我找到了答案 - 如果你将脚本放入 cron 中,则不需要使用“”来包含要运行的命令。脚本在命令行上像这样工作,但在 cron 中则不行。改用 '' 来包含命令,如下所示(我使用 csv 选项,这样我就可以对结果进行一些操作):
我创建了一个名为的变量SPEEDTEST
来运行该命令,如下所示,然后使用以下命令运行它$SPEEDTEST
SPEEDTEST='/usr/local/bin/speedtest --csv'