Linux下定时执行——crontab
16 July 2014
想做一个服务,能够每天定时调用执行。比如,每天定时推送微信,或者发送邮件,又或者为Android端推送消息。形式多种多样,内容主要是能有一个地方能够提醒展示今天要做的事情。像结婚纪念日、好朋友生日这种,还是挺重要的。
想做一个服务,能够每天定时调用执行。比如,每天定时推送微信,或者发送邮件,又或者为Android端推送消息。形式多种多样,内容主要是能有一个地方能够提醒展示今天要做的事情。像结婚纪念日、好朋友生日这种,还是挺重要的。
获取上面提到的这些内容都不难,比较难的是定时执行。
在语言层面,都实现了计时执行。比如,经过5分钟之后调用。计时器和定时器不同,可以比作是沙漏和闹钟。go语言可以使用time.NewTicker
就能实现。但这个并不是定时执行。如果我们想每天早上6点都能执行,用这个就很费劲。我之间就做过这个尝试。
- 先获取当前时间,再根据定时时间,相减得到计时器时间;
- 执行改计时器时间,结束后执行操作;
- 然后,将计时器修改为24小时为一个周期。
后来,我在Github上面看别人写的时钟,好像也是这么干的。这样做太蹩脚了。
再后来,了解到,Android平台可以使用AlarmManager来辅助实现定时器。其实就是能够调用系统自身的闹钟。自己比较熟的常见语言,都没找到语言层面实现的定时器,而Android平台的AlarmManager让我意识到,可能这个东西本来就不是语言负责的东西,而是系统层面的东西。
意识到这个问题之后,问题就迎刃而解了。直接发现Linux系统内置命令crontab
就支持定时调用,并且服务器端也都是靠这个来做定时调用的。
定时调用需要写配置文件,Ubuntu默认是使用nano作为默认编辑器,果断不会用,先换成vi。
echo export EDITOR=/usr/bin/vim >> ~/.bashrc
source ~/.bashrc
接着,编写定时调用规则:
crontab -e
编写调用规则;-
在最后添加一行记录。记录分为两部分,执行时间和命令。这里的命令是
/root/day >> $HOME/test.txt
,执行day命令,并且将结果输出到文件test.txt当中;0 */1 * * * /root/day » $HOME/test.txt
第一部分,时间规则如下:
段 | 含义 | 取值范围 | ||||
第一段 | 代表分钟 | 0—59 | ||||
第二段 | 代表小时 | 0—23 | ||||
第三段 | 代表日期 | 1—31 | ||||
第四段 | 代表月份 | 1—12 | ||||
第五段 | 代表星期几,0代表星期日 | 0—6 |
- 最后,重启服务
service cron restart
即可。
参考文献
原文链接:Linux下定时执行——crontab,转载请注明来源!
–EOF–