crontab是Unix、Linux操作系统下用于设置周期性执行任务的指令,首先crontab分系统crontab和用户crontab,路径也不同,如下:
系统crontab:
路径:/etc/crontab
![ca4918eebb00a887d77b70430481544b.png](https://i-blog.csdnimg.cn/blog_migrate/23b01be5d807f54230f869d6ecddffa2.jpeg)
图1 系统crontab文件
用户crontab:
路径:/var/spool/cron/当用户名
![62c525e410d07b7ddbac1ccf11db32fb.png](https://i-blog.csdnimg.cn/blog_migrate/20380da77df61d3190e148657b94bd6d.jpeg)
图2 当前用户crontab文件
其次:要区分以下三个概念,不要混淆。
- cron:任务名称
- crond:任务守护进程,用于时刻检查crontab中预设的作业任务,可以通过ps -ef|grep crond查看进程是否启动。
- crontab:任务调度表,存放任务。
一、crontab常见命令
crontab [-u user] [-l | -r | -e] [-i]
-l:列出当前用户的计划任务。
-e:编辑当前用户的计划任务。
-r:删除当前用户的所有计划任务。即删除/var/spool/cron/USERNAME文件。
-u:管理指定用户的计划任务,仅root有权限。
-i:在使用-r选项删除所有任务时提示用户确认。
二、如何启动一个crontab定时任务
首在任务装载之前,我们执行以下命令:
crontab -l
![8d920735073eac8aea43d8672f9055f9.png](https://i-blog.csdnimg.cn/blog_migrate/8aef5f33ccc3faf68316bf762be0515b.jpeg)
图1 crontab任务为空
此时crontab是空的,没有装载任何任务,下面我们往crontab里写一个定时任务:
1、创建一个名为cron的crontab文件,内容如下:
32 10 * * * /bin/echo ‘date’ > /dev/console
保存后,给此文件赋予可执行权限 chmod +x cron
2、装载任务
crontab cron
![b1c3931e239cbeb6005110d7dfb7a647.png](https://i-blog.csdnimg.cn/blog_migrate/7f50c46f22b929a01a8b4cfe92e0bf5d.jpeg)
图2 任务信息
任务提交crontab之后,在/var/spool/cron路径下会生成cron的副本,以当前用户命名,如:我当前用户是root,此时在这个路径下,生成了root用户,内容跟cron文件的一模一样。
![e4bcfdabae8883490e0e511c4d6fe3b5.png](https://i-blog.csdnimg.cn/blog_migrate/72db4fe5aab2908fdc4134910e5213c3.jpeg)
图3 cron的副本文件
这样到点就开始执行了。
三、如何确定crontab任务是否到点执行,以及SHELL有无报错?
要判断crontab是否到点执行,我们需要查看:
more /var/log/cron
![8ddb86e5868922ddf86cf462ae24c7f0.png](https://i-blog.csdnimg.cn/blog_migrate/6069a1708ac1c10b0eb4c9ef7e9926b3.jpeg)
图4 检查是否到点执行
如果任务到点执行了,但是没有达到预期,那就要怀疑SHELL脚本执行是否出错了,可以查这里:
cd /var/spool/mail/root
![aba9a5ab733b62de09aef9999255ea6d.png](https://i-blog.csdnimg.cn/blog_migrate/1f4e61c9d30ce487fb46225caf781019.jpeg)
图5 mail邮件通知
如上图:我故意将路径写错,到点执行后报错,系统收到mail通知。
四、编辑crontab任务
[root@ultrapower mail]# crontab -e
50 15 * * * /bin/echo ‘date’ > /dev/console
五、删除crontab任务
[root@ultrapower mail]# crontab -r
[root@ultrapower mail]# crontab -l
no crontab for root
[root@ultrapower mail]#
OK,到此为止,如果哪里还不清楚,请在评论区留言,看到会回复。