【问题标题】:Cronjob problems定时任务问题
【发布时间】:2014-09-06 21:07:02
【问题描述】:

我编写了一个小的 bash 脚本来使用 speedtest-cli 进行宽带速度测试。 脚本运行后,它应该将输出写入 csv 文件。 我测试了脚本,手动调用时一切正常,但是当脚本被 cron 调用时,我无法获得正确的输出,即下载和上传速度。

这是我的 cronjob:

0,30 * * * * speedtest_data/speedtest.sh

这是speedtest.sh的内容:

#!/bin/bash
#echo $(date | cut -d' ' -f5) $(echo ,) $(speedtest-cli --server 4440 | grep -n -e Download -e Upload | cut -d':' -f3 | cut -c1-6)

datetime=$(date +%d/%m/%Y';'%H:%M )
#time=$(date | cut -d' ' -f4)
speeds=$(speedtest-cli --server 4440)
download=$(echo "$speeds" | grep -n Download | cut -d':' -f3 | cut -c2-6)
upload=$(echo "$speeds" | grep -n Upload | cut -d':' -f3 | cut -c2-6)

echo "${datetime};${download};${upload}" >> /home/pi/speedtest_data/speeds.csv 2>> /home/pi/speedtest_data/speeds_err.log

举个例子,这是编写所有内容的输出文件:

06/09/2014;19:25;61.80;20.13
06/09/2014;20:30;;
06/09/2014;21:00;;
06/09/2014;21:30;;
06/09/2014;22:00;;

第一行是手动执行脚本的结果。其余的是 cron 调用。谁能解释一下为什么当通过 cron 调用脚本时,我无法读取下载和上传速度?

【问题讨论】:

  • 您可能需要将 speedtest-cli 的路径添加到您的 crontab 的 PATH 环境中,或者您可以将其添加到您的脚本中,例如 speeds=$(/path/to/speedtest-cli ...) 。祝你好运。
  • Tks @shellter,这实际上是问题所在。谢谢。

标签: bash cron


【解决方案1】:

此外,每当您编写 cronjob 时,请确保您提供脚本的 ABSOLUTE 路径名,而不是 RELATIVE 路径名。如果您使用相对路径名,那么它可能不适合您。

例如:
绝对路径 - /var/www/html/scripts/db_backup.php
相对路径——scripts/db_backup.php

所以让我举个例子:一个 cronjob 来转储所有天的每一分钟的当前日期时间,而不考虑星期几。

crontab.txt
-----------

* * * * * /var/www/html/shell_scripts/currentDateTime.sh

currentDateTime.sh
------------------
#!/bin/bash

date >> /var/www/html/date_logs/dateTime.txt

确保您授予 currentDatetime.sh 的执行访问权限。在 linux 机器中,您可以通过以下方式做到这一点

chmod +x currentDateTime.sh

or

chmod 755 currentDateTime.sh

要注册 cronjob,我们将通过以下方式进行。在这里,我更改了我的 crontab.txt 所在的目录,即 /var/www/html/shell_scripts。然后执行以下命令。

/* To Register my cronjob to cron table */

crontab crontab.txt

希望它可以帮助某人。快乐编码!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多