oflyhigh avatar

每天进步一点点:crontab设置疏忽 & curl静默模式

oflyhigh

Published: 12 Apr 2021 › Updated: 12 Apr 2021每天进步一点点:crontab设置疏忽 & curl静默模式

每天进步一点点:crontab设置疏忽 & curl静默模式

这两天在服务器上放置一个超级简单的脚本:定时访问一个网址。话说这个都无需脚本,直接curl指令+crontab就可以搞定,于是我随手设置上,完工美滋滋。

image.png
(图源 :pixabay)

不过我今天登录服务器看了一下日志,我晕,怎么一堆出错信息,然后貌似我被要访问的网站屏蔽IP了,这下就尴尬了。😅

crontab执行次数

仔细看了一下日记,首先可以判断的是,我的crontab设置出错了。因为我期望是每2小时执行一次,那么按说从晚上到早晨(不超过12个小时),多说有6组输出,可是我看网站给我的错误提示足足几十组。

crontab我设置过无数次了,脚本也非常简单,怎么就能被错误的执行N多次呢?我研究半天,才发现自己疏忽在哪里,我把定时任务写成类似如下模样:

* */2 * * * /home/test1234/test.sh >>/home/test1234/test.log 2>&1

我期望的是,每两小时执行一次脚本,并把信息写入到test.log,你能发现哪里出错了吗?

想必懂的一下子就可以看出来,我把分钟位也写成了*。这样这条指令的意义就变成了每隔两小时,每分钟执行一次。我怎么能犯这样的错误呢?我晕,把分钟位改成0,也就是整体如下的模样:

0 */2 * * * /home/test1234/test.sh >>/home/test1234/test.log 2>&1

这回执行次数应该正常了,这种低级的错误,哎,大概是晚上时候脑子不清醒吧。

curl 静默模式

搞定了crontab执行次数的问题,我们再来看另外一个问题,我发现log文件中一堆curl下载进度的信息,让我几乎没法正常看日志了,为啥会出现进度信息呢?我单独指令的时候没啥问题啊。

仔细研究了一下,不知道为啥,脚本中的curlcrontab中的输出重定向似乎起了一些化学反应😵。

我来做个测试:

curl www.cutehive.com

上述指令输出如下内容:

image.png

这是正常的,因为我设置了明文(HTTP)访问重定向到加密(HTTPS)链接上去。

然后我在用如下方式:

curl -o output.txt www.cutehive.com

或者:

curl www.cutehive.com >> output.txt

就会显示如下进度信息,并把正常输出写入到output.txt中:

image.png

知道了这个问题所在,解决起来就简单了,比如说我们可以crontab中不加输出重定向;或者将crontab执行时的STDOUT(1)以及STDERR(2)分别写到log以及errror_log中。

但是这两种方法都不优雅,最优雅的方式是给curl加个-s参数(静默模式),就一切搞定啦,比如上述指令,写成:

curl -s -o output.txt www.cutehive.com

就没有乱七八糟的进度信息啦,清清爽爽,美滋滋。一个教训就是半夜还是不要写程序脚本啥的,不然太容易犯低级错误啦😭

Leave 每天进步一点点:crontab设置疏忽 & curl静默模式 to:

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #cn posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh