Linux-Crontab食用指南
Crontab是啥?
我们先来看看wiki的说法:
再来看看官方(http://crontab.org/)对crontab的定义:
大概说明了crontab命令的使用方法、参数的使用等注意事项,其实这些中文网已经有很多了。推荐一个小网站:https://tool.lu/crontab 这个网站可以用来执行我们的cron表达式,以检测是否有错误。我发现这种小工具网站是真的多,而且一个比一个好,一个比一个全,真的牛皮
好了,现在我们知道了,原来crontab中文名:任务时间表。它是linux家出厂自带的,像我的云服务器(腾讯云centos7)自己就带了一个我也不知道干嘛用的cron job,百度看好像是加什么文件锁的。等以后功力足够了再去深究
1 |
|
还是先来看看linux自带的crontab文件是怎么定义的吧
1 |
|
案例
1 |
|
非root用户创建cron: 先在家目录/home/linkdo下创建linkdocron文件,系统会生成一个副本文件linkdo在/var/spool/cron/下,但普通用户并不能直接对她读写,只能通过crontab-e来修改。官方推荐应该是使用crontab -e来修改cron job,但这种修改好像只会改动/var/spool/cron/linkdo,/home/linkdocron并不会改动,导致我crontab -e完了就crontab linkdocron一下,结果半天没改动。实际上通过crontab-e 修改后,无需重新crontab
crontab例子:
1 |
|
注意
- 如果一个cron务需要定期而不是按每小时,天,周,月来执行,则需要添加/etc/cron.d目录,语法与/etc/crontab一致
- crontab是由系统自动调度的,所以并不会加载任何环境变量,需要在crontab中指定任务运行所需的环境变量。一般来说,手动执行没问题,crontab执行有问题的,都是环境变量的问题
- 如果执行的是脚本 , 脚本中的路径需要使用全局路径
- 需要用到其他变量时,需source引入所需环境变量
- crontab突然失效时 可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron
- crontab job分为系统级调题和用户级调度(root用户也属于用户级调度)。用户级任务调度可以通过"crontab -uroot -e"升级为系统及调度,或者直接将调度任务写入/etc/crontab,例如定时重后系统,需要写如/etc/crontab下,写root下是没用的
- crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date '+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’。
Linux-Crontab食用指南
https://zhouyinglin.cn/post/1f3c0c60.html