在Linux中,如何阻止'date -s'在空输入中分配00:00时间

时间:2019-12-11 17:10:03

标签: linux bash date

我买了一台新笔记本电脑,但是由于某种原因,内置时钟每天丢失15分钟。我购买该产品的公司更换了CMOS电池,但这并没有什么不同。我最终在我的Ubuntu crontab中放入了以下内容:

*   *   *   *   *   date -s "$(wget -S  "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//' | head -1l | awk '{print $1, $3, $2,  $5 ,"GMT", $4 }' | sed 's/,//')"

当我有Internet连接时,它的运行效果很好(至少直到我处于GMT时区为止,因为Google返回GMT时间),但是当我离线时,它将时间设置为当前日期00:00 am。即date -s ""将时间更改为00:00。

是否可以传递一些标志给date,以告诉它不要为空输入更改任何内容?还是修改cron作业的其他部分?

1 个答案:

答案 0 :(得分:2)

如果需要在crontab行中使用条件,则实际上是使用bourne shell执行所有操作,因此可以使用shell条件“ &&”和“ ||”

* * * * *  foo=$(wget...) ; test -z "$foo" || date -s "$foo"

将blat输出分配给'foo'..测试foo是否为空,如果不为空,则使用它来设置日期