Crontab命令无法正确执行

时间:2018-11-14 15:39:28

标签: bash cron

几天前,我向speedtest-cli请求了一些帮助,现在我需要以下方面的帮助:

我制作了此crontab:

0 * * * * (date +"%A, %d.%m.%Y %X Uhr" >> /home/pi/speedtest/speed.txt; /usr/bin/speedtest-cli --server 3645 --simple >> /home/pi/speedtest/speed.txt; echo "\n" >> /home/pi/speedtest/speed.txt)
10 * * * * (speedtest-cli --server 3645 --share; grep -Po 'Share results: \K.*' >> /home/pi/speedtest/latest.txt)

(请点击此处查看格式是否更好:https://hastebin.com/holugehuvo.js

我将解释其用途:因此,第一个命令应将我的区域格式的当前日期和时间打印到文本文件中。 speedtest-cli --server 3645 --simple的输出应附加到同一文件,之后应换行,以便我可以看到下一个输出(一小时后输出)的格式正确。

命令speedtest-cli --server 3645 --simple的输出将是这样的:

Ping: xx.xx ms
Download: 53.09 Mbit/s
Upload: 7.92 Mbit/s

应该每小时重复一次。

第二个cron应该grep命令返回的http://地址,并将其打印到一个名为latest.txt的文件中。

speedtest-cli --server 3645 --share的示例输出如下:

Retrieving speedtest.net configuration...
Testing from Provider (xx.xxx.xxx.xxx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Citycom Telekommunikation GmbH (Graz) [xx.xx km]: xx.xxx ms
Testing download speed................................................................................
Download: 52.88 Mbit/s
Testing upload speed....................................................................................................
Upload: 7.62 Mbit/s
Share results: http://www.speedtest.net/result/7799311524.png

我只需要那个http://地址,因为我想在PHP中阅读该地址并在本地网页上显示此png,这样我就知道我最近的速度测试是什么。

这两个命令应该每小时运行一次,我使用了一些偏移量,以使速度不受第一个命令中进行的其他速度测试的影响。

我需要两个输出,因为我想监视自己的上一速度并使用PHP访问该图像。

我知道这是一个/很长的问题,但是我想向您提供许多详细信息,以便更轻松地理解我想做什么。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这里有几点改进之处:

  1. %的用法:

    您必须对其进行转义并将其写为\%

      

    “第六个”字段(该行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或一个%字符,都将由/bin/shSHELL变量中指定的shell执行。      cronfile。除非使用反斜杠(%进行转义,否则命令中的\字符将被更改为换行符,并且第一个%之后的所有数据将作为标准发送给命令输入。

         

    来源:man 5 crontab

  2. 复合命令

    您可以在单个crontab命令中编写多个命令,

    ( command1; command2 ) >> /path/to/output
    

    尽管这可行,但必须指出,这将产生一个子外壳,并且有点过大。您可能会考虑不要使用:

    { command1; command2; } >> /path/to/output
    

    或者如果command2失败时不希望command1执行,则可以执行以下操作:

    command1 && command2 >> /path/to/output
    
  3. 管道的使用:您的第二条命令应使用管道(|

    speedtest-cli --server 3645 --share | grep -Po 'Share results: \K.*' >> /home/pi/speedtest/latest.txt