原来,在Linux下写了很多crontab,来定时执行某些任务,

现在有以下需求:

需求:是要注释某些crontab任务,

方法:只要在所要取消的crontab任务前,加'#'即可。

e.g.

5 4 * * sun echo "run at 5 after 4 every sunday"  

注释:

#5 4 * * sun echo "run at 5 after 4 every sunday"  

就这么简单。

遇坑1

看下面例子

最近写了个脚本setdatetime.sh,手动执行的好好的,但是到了crontab中却无法定时执行,如下:

*/1 * * * * /data/test/setdatetime.sh

乍一看,没什么不对啊,什么情况!

后来在其他地方看到,必须要加sh才可以,如下:

*/1 * * * * sh /data/test_tzb/setdatetime.sh

如此,正常执行。

少一个sh,折腾大半天。。。

坑2

嗨,又遇1坑,老半天又没了,写了一脚本,从baidu获取时间,然后date -s。

#!/bin/bash
sudo date -s "$(date --date="$(wget -S  "http://www.baidu.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/,//')")"

用sh执行,一点问题都没有。

但是放在crontab,又不行了,任务倒是执行,但是结果不对啊。

Fri Jul  1 00:00:00 CST 2021

我明明在另一台服务器上,用crontab执行结果正确了啊,到这台机器上,怎么又不正确了,气人。

无奈执行,我从另一台机器,直接把脚本copy过来,crontab执行以下脚本就正确了。

#!/bin/bash
export LANG=en_US.UTF-8
.  /etc/profile
sudo date -s "$(date --date="$(wget -S  "http://www.baidu.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/,//')")"

看出不同了么?

.  /etc/profile 要加上。

Linux博大精深,我等学艺不精。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐