每天进步一点点: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

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

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now