40

crontab为何自动中断

 5 years ago
source link: http://blog.guoyb.com/2018/09/15/crontab-auto-kill/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在最近开发的一个系统中,有一个定时任务,每天需要将一份数据(大约200w条),发送至一个线上key-value存储系统中。

说到定时任务,最常见的,就是使用crontab。原来这一套系统已经开发完成,部署在深圳IDC,工作良好。最近,需要在天津IDC也部署一套。但是在天津部署之后,我却发现,天津的这套系统每天只能定时发送48999条数据(准确数字),然后就自动停止了。

我首先尝试了crontab -l,并直接手动执行其输出中的相关脚本。这时可以发现,程序并没有中断,完整发送了所有数据。

这时我一度怀疑,是我在程序中设置了什么阈值,才能导致每天都无比准确的发送48999条数据就停止。但是复查一遍代码后并没有查询到什么可疑的配置。

接下来我又在网上搜索crontab相关的问题,但是大都是写一些无法启动crontab相关脚本的问题,对于我这种程序可以定时启动,但是又“准确”的自动中断的问题,却没什么相关答案。

考虑到在深圳IDC没有问题,但是在天津IDC却出现了这个诡异的问题。两个IDC使用的机器型号并不一致,于是我又从机器的角度重新查找crontab相关的问题,终于找到的罪魁祸首:

原来,这是由于在部分机器上,crontab对于执行程序的输出有大小限制,输出超出一定的字节之后就会自动停止程序。

而我的程序每发送1000条数据即会输出一条log,所以每次正好输出49000这条log之后,就超出了大小限制,因此每次都会自动停止在48999条了。

解决方案:可以 重定向输出至 >/dev/null,如:

1 8 * * * cd /path/to/your/bin/ && ./your_bin --flagfile=../conf/your.flags >/dev/null 2>&1 &

希望遇到类似问题的同学,可以尽快的搜索到我这篇文章。(手动狗头)

转载请注明出处: http://blog.guoyb.com/2018/09/15/crontab-auto-kill/

欢迎使用微信扫描下方二维码,关注我的微信公众号TechTalking,技术·生活·思考:

b6niUzu.jpg!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK