作用:
crond是linux定期执行程序时使用的命令。 操作系统安装完成后,缺省情况下将启动此任务调度命令
crond命令每分钟检查是否有作业定期运行,如果有,它会自动运行
linux系统的定时任务调度工作主要分为两类:
系统执行的任务--系统定期执行的任务,例如轮询系统日志、备份系统数据和清理系统缓存
[ root @ root~~ ] # ll/var/log/messages *-- rw-- rw---1 root root 149 feb 2115336011/var/log/messages-rw-- VW messages-2021 01 31-rw---1 root root 578536 feb 141:32/var/log/messages-2021 02 14-rw---var/log/messsag 例如,每5分钟与互联网上的时间服务器进行时间同步,每10分钟检查邮件服务器上有无新到的消息。 这些工作由用户自己设定
相同软件种类:
利用cronie实现定时任务功能利用atd实现定时任务功能利用anacron实现定时任务功能只需设定一次即可,常用于家用电脑的非7*24服务器
Linux crond时间任务包
使用# yumprovidescrondoryumprovidescrondtab查找定时任务命令属于哪个软件工具包[ root @ root~] # yumprovidescrontab #工具包名称crontab [ root @ root~] # yum provides */crontab #由于搜索尚未成功,因此建议您优化yum源以扩展yum源。 #根据搜索到的包名称检查是否安装了cronie软件[ root @ root~] # rpm-qacroniecrooniecroooot显示包中的所有文件信息[ rroot @ root~] cron.d/etc/cron.d/0 hourly/etc/cron.deny/etc/PAM.d/cron.d/cam systemd/system/crond.serverve share/doc/cron ie usr/share/doc/cron ie-1.4.11/changelog/usr/share/doc/cron ie-1.4.11/install /
常用相关配置文件介绍(有的目录属于系统有的目录属于cronie软件包中):
/var/spool/cron/目录存储crontab任务配置文件,每个用户都包含一个root,每个配置文件都会创建一个用户名命令
名为/etc/crontab的文件用于调度各种管理和维护任务
/etc/cron.d/此目录用于存储要执行的crontab文件或脚本
/etc/cron.deny crontab限制用户权限,使用crontab的用户无法写入。 未写入的用户可以使用crontab
/etc/cron.allow crontab限制用户权限,使用crontab的用户可以对其进行写入。 未写入的用户不能使用crontab
当ps: cron.deny和cron.allow都存在时,忽略cron.deny的内容,cron.allow文件的权限大于cron.deny
系统计划任务周期:每小时控制计划任务目录:/etc/cron.hourly
系统计划任务周期:每日控制计划任务目录:/etc/cron.daily 00:00-2:59
系统计划任务周期:每周控制计划任务目录:/etc/cron.weekly 7天
计划任务周期:每月控制计划任务的目录:/etc/cron.mo
nthly 30 28 31
定时任务crond支持两种实现方式:
1. 直接编写计划任务
2. 使用目录的方式,放在指定的目录都会定时执行
crontab命令及参数:
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
常用参数:
-l 查看crontab文件内容
-e 编辑crontab文件内容
-r 移出所有crontab文件内容(如果只删除某个,用-e编辑即可)
-i 配合-r参数使用,在移出所有crontab文件内前提示是否删除
提示:
1. crontab{-l | -e}实际上就是在操作/var/spool/cron/当前用户这样的文件
2. 在crontab命令中只有"绝对路径",不存在相对路径,执行任何命令都需要写绝对路径 (which 命令 -- 查看命令绝对路径)
定时任务直接编辑
crontab -e
#执行命令后直接进入vi编辑界面 每一行都是单独一项工作
编写语法规范:
[root@root ~]#cat /etc/crontab SHELL=/无情的咖啡豆/bashPATH=/s无情的咖啡豆:/无情的咖啡豆:/usr/s无情的咖啡豆:/usr/无情的咖啡豆MAILTO=rootHOME=/# 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
crontab基本格式
* * * * * cmd
分 时 日 月 周 需要执行的命令
代表意义
分钟
小时
日期
月份
周
命令
数字范围
0~59
0~23
1~31
1~12
0~7
需要执行的命令
周 -- 0或7都代表"星期天"的意思。
特殊字符
代表含义
*
星号代表任何时刻,就是“每”的意识。取值范围所有数字
举例: 00 01 * * * cmd 表示每天的01点执行命令
,
逗号代表分割时段。
举例: 30 09,10 * * * cmd 表示每天的9点30分和10点分执行命令
-
减号代表一个时间范围段。
举例: 20 09-12 * * * cmd 表示每天的9点到12点的20分(9点20|10点20|11点20|12点20)执行命令
/n
n代表数字范围内的数字,即每隔n单位间隔的意识,例如每隔15分钟:*/15 * * * * cmd
举例: 15 */3 * * * cmd 表示每隔3小时的15分钟执行命令
实践应用:
#查看crond是否开启及开机自启动#centos6[root@root ~]#service crond statuscrond (pid 1038) is running...[root@centos6-003 ~]#chkconfig --listabrt-ccpp 0:off1:off2:off3:on4:off5:on6:offabrtd 0:off1:off2:off3:on4:off5:on6:offauditd 0:off1:off2:on3:on4:on5:on6:offcrond 0:off1:off2:on3:on4:on5:on6:off#centos7systemctl status crond#查看定时任务[root@centos6-003 ~]#crontab -l#每两分钟执行一次echo命令 */2 * * * * echo "crontad定时任务执行"#通过日志或邮件信息查看定时任务是否执行[root@root ~]#tail -5 /var/log/cronFeb 21 19:42:01 centos6-003 CROND[2162]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 19:44:01 centos6-003 CROND[2169]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 19:46:01 centos6-003 CROND[2176]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 19:48:01 centos6-003 CROND[2183]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 19:50:01 centos6-003 CROND[2191]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")[root@root ~]#tail -10 /var/spool/mail/rootX-Cron-Env: <SHELL=/无情的咖啡豆/sh>X-Cron-Env: <HOME=/root>X-Cron-Env: <PATH=/usr/无情的咖啡豆:/无情的咖啡豆>X-Cron-Env: <LOGNAME=root>X-Cron-Env: <USER=root>Message-Id: <20210221115201.D5AADC1467@root.localdomain>Date: Sun, 21 Feb 2021 19:52:01 +0800 (HKT)crontad定时任务执行#crontad定时任务正常执行后创建一个脚本再进行测试[root@root ~]#cat /tmp/crondTest.sh #!/无情的咖啡豆/bashtouch crondTest_`date +%F-%H-%M`.txt#编写定时任务[root@root ~]#crontab -e#查看编写的定时任务[root@root ~]#crontab -l#每两分钟执行一次echo命令 */2 * * * * echo "crontad定时任务执行"#每隔一分钟执行crondTest.sh*/3 * * * * /无情的咖啡豆/sh /tmp/crondTest.sh#通过日志和邮件查看是否执行*/3 * * * * echo "crontad定时任务执行"
定时任务排查方法:
#检查定时任务配置文件是否存在[root@root ~]#cat /var/spool/cron/root #每两分钟执行一次echo命令 */2 * * * * echo "crontad定时任务执行"#每隔一分钟执行crondTest.sh*/3 * * * * /无情的咖啡豆/sh /tmp/crondTest.sh#查看定时任务日志文件[root@root ~]#tail -3 /var/log/cronFeb 21 20:18:01 root CROND[2409]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 20:20:02 root CROND[2420]: (root) CMD (echo "crontad345256232346227266344273273345212241346211247350241214")Feb 21 20:21:01 root CROND[2427]: (root) CMD (/无情的咖啡豆/sh /tmp/crondTest.sh)执行时间 主机名 定时任务执行PID 用户名 执行命令#打印信息到屏幕上的定时任务可以查看邮件[root@root ~]#tail -5 /var/spool/mail/root Message-Id: <20210221122801.BBF4BC1467@root.localdomain>Date: Sun, 21 Feb 2021 20:28:01 +0800 (HKT)crontad定时任务执行
编写定时任务的注意事项:
1) 编写定时任务要有注释说明
2) 定时任务命令或程序写到脚本里执行
3) 命令和文件使用绝对路径
4) 编写定时任务,结尾加 > /dev/null 2>&1 可以将输出到屏幕上的信息保存到黑洞中,避免占用磁盘空间
5) 指定用户下执行相关定时任务
6) 生产任务程序尽量不要产生屏幕输出信息
注: 定时任务中执行命令,如果产生输出到屏幕的信息,都会以邮件方式告知用户
/var/spool/mail/root 不断变大占用磁盘空间 占用的block空间
解决方法: 将邮件服务关闭
centos6: service postfix stop
centos7: systemctl stop postfix
/var/spool/postfix/maildrop/ 不断产生小文件占用磁盘空间 占用的inode空间
解决方法: 删除小文件
rm -f /var/spool/postfix/maildrop/*
systemctl start postfix