crond计划任务

一 crond计划任务

1、什么是Crond

Crond是Linux系统中⽤来定期执⾏命令或脚本的⼀种服务软件,⼀般情况下,我们安装完CentOS操作 系统之后,默认便会启动Crond任务调度服务。

Crond服务会定期(默认每分钟检查⼀次)检查系统中是否有要执⾏的任务⼯作,如果有,便会根据其 预先设定的定时任务规则⾃动执⾏该定时任务⼯作,这个Crond定时任务服务就相当于我们平时早起使 ⽤的闹钟⼀样。

2、crond⽇志⽂件

/var/log/cron

3、为什么要使⽤定时任务?

定期备份数据,定期执⾏脚本程序

4、定时任务主要分为以下两种使⽤情况。

(1)系统级别的定时任务: 临时⽂件清理例/tmp和/var/tmp等、系统信息采集、⽇志⽂件切割

(2)⽤户级别的定时任务: 定时向互联⽹同步时间、定时备份系统配置⽂件、定时备份数据库的数据

⼆ 定时任务管理

系统级计划任务

定义⽅式⼀:编辑⽂件/etc/crontab

[root@localhost ~]# vim /etc/crontab
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR
sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
分钟 ⼩时 ⽇ ⽉ 周 

定义⽅式⼆:把脚本放到该⽬录下

/etc/cron.hourly/ 	# 系统定时任务每个⼩时运⾏这个⽬录⾥的内容
/etc/cron.daily/ 	# 系统定时任务每天运⾏这个⽬录⾥的内容
/etc/cron.weekly/	 # 系统定时任务每周运⾏这个⽬录⾥的内容
/etc/cron.monthly/ 	# 系统定时任务每⽉运⾏这个⽬录⾥的内容

⽤户级计划任务

[root@localhost ~]# crontab -e 	# 创建计划任务
* * * * * /bin/ls
[root@localhost ~]# crontab -l 	# 查看计划任务
* * * * * /bin/ls
[root@localhost ~]# ls /var/spool/cron/
root
[root@localhost ~]# cat /var/spool/cron/root # 都是写在这⾥呢
* * * * * /bin/ls
[root@localhost ~]# tail /var/log/cron # 查看⽇志
[root@localhost ~]# crontab -u egon -e
# /etc/cron.deny 是定时任务的⿊名单,使⽤root将需要拒绝的⽤户加⼊/etc/cron.deny
注:用户级别的计划任务存放在/var/spool/cron/,不同的用户存放的计划任务是以其自己的名字命名的脚本
[root@localhost ~]# echo "egon" >> /etc/cron.deny
[root@localhost ~]# su - egon # 登陆该普通⽤户,⽆法编写定时任务
上⼀次登录:四 8⽉ 13 19:44:10 CST 2020pts/1 上 [egon@localhost ~]$ crontab -e
You (egon) are not allowed to use this program (crontab)
See crontab(1) for more information

计划任务语法格式

crond是按照分钟进⾏计算的,不⽀持秒

* 表示任意的(分、时、⽇、⽉、周)时间都执⾏
- 表示⼀个时间范围段, 如5-7点
, 表示分隔时段, 如6,0,4表示周六、⽇、四
/1 表示每隔n单位时间, 如*/10 每10分钟
了解定时任务crontab的编写规范
00 02 * * * 	#每天的凌晨2点整执⾏
00 02 1 * * 	#每⽉的1⽇的凌晨2点整执⾏
00 02 14 2 * 	#每年的2⽉14⽇凌晨2点执⾏
00 02 * * 7 	#每周天的凌晨2点整执⾏
00 02 * 6 5	  #每年的6⽉周五凌晨2点执⾏
00 02 14 * 7 	#每⽉14⽇或每周⽇的凌晨2点都执⾏
00 02 14 2 7 	#每年的2⽉14⽇或每年2⽉的周天的凌晨2点执⾏
*/10 02 * * * 	#每天凌晨2点,每隔10分钟执⾏⼀次
* * * * * 	#每分钟都执⾏
00 00 14 2 * 	#每年2⽉14⽇的凌晨执⾏命令
*/5 * * * *	 #每隔5分钟执⾏⼀次
00 02 * 1,5,8 *	 #每年的1⽉5⽉8⽉凌晨2点执⾏
00 02 1-8 * * 	#每⽉1号到8号凌晨2点执⾏
00 21 * * * 	#每天晚上21:00执⾏
45 4 1,10,22 * * 	#每⽉1、10、22⽇的4:45执⾏
45 4 1-10 * * 	#每⽉1到10⽇的4:45执⾏
3,15 8-11 */2 * * 	#每隔两天的上午8点到11点的第3和第15分钟执⾏
0 23-7/2 * * * 	#晚上11点到早上7点之间,每隔两⼩时执⾏
15 21 * * 1-5 	#周⼀到周五每天晚上21:15执⾏

总结

  • 1、查看cron服务是否起作⽤:

如果我们要查看定时任务是否准时调⽤了可以/var/log/cron中的运⾏信息cat /var/log/cron,也可以⽤tail -f /var/spool/mail/⽤户名,来查看普通⽤户的计划任务执⾏情况

此处需要记住两点:

(1):cron 守护进程每分钟都检查 /etc/crontab ⽂件、etc/cron.d/ ⽬录、以及 /var/spool/cron ⽬ 录中的改变。如果发现了改变,它们就会被载⼊内存。这样,当某个 crontab ⽂件改变后就不必重 新启动守护进程了。**

(2):crontab的⽤户⼿册中推荐每⼀个命令使⽤绝对路径,例如调⽤rm命令时写作:/bin/rm,这 是为了防⽌由于每⼀个⽤户的PATH环境变量不同⽽导致命令⽆法找到的错误。

  • 2、编写定时任务时,先在命令⾏上⾯执⾏⼀次,查看是否可以执⾏成功。

  • 3、把定时任务执⾏的结果定向到空,如果不定向到空的话,邮件服务开启时,系统会⼀直发送邮件信息,邮 件服务关闭时,系统会⼤量⽣成⼩⽂件。

1.定时任务规则之前加注释
2.使⽤脚本执⾏定时任务(只有⼀条简单命令的可以直接使⽤命令执⾏)
3.运⾏脚本⼀定要⽤绝对路径执⾏,统⼀脚本位置。
4.定时任务中date命令的百分号需转义才能使⽤。
5.命令或脚本结果(正确及错误)定向到空(>/dev/null 2>&1)或追加到⽂件中 >>/tmp/oldboy.txt 2>&1
6.避免不必要的程序及命令输出,如打包命令,tar -v的显示过程的选项。
7.打包压缩使⽤相对路径(切到⽬标⽬录的上⼀级打包⽬标)
8.定时任务脚本中的程序⽂件 ,尽量⽤绝对路径,⽤户的定时任务中的⽂件默认存放在当前⽤户的家⽬录
9.系统与命令位置有关的环境变量问题,建议脚本中重新定义环境变量PATH。
posted @ 2021-04-02 16:41  小绵  阅读(101)  评论(0编辑  收藏  举报