1.1 定时任务crond介绍
Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,安装完centos 6/7等linux操作系统之后,默认便会启动crond任务调度服务,crond服务也会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个crond定时任务服务就相当于“闹钟”一样。
1.2 Linux系统的定时任务
Linux系统中定时任务调度的工作可分为以下两种情况:
一、 linux系统自身定期执行的任务工作:
系统周期性自行执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等,这些任务无需我们人为干预。
[root@node1 ~]# ls -l /var/log/messages* # 系统的日志
-rw-------. 1 root root 36080506 9月 1 11:56 /var/log/messages
-rw-------. 1 root root 26616060 8月 11 15:44 /var/log/messages-20190811
-rw-------. 1 root root 26112559 8月 19 10:23 /var/log/messages-20190819
[root@node1 ~]# ls -l /var/log/secure* # 用户登录日志
-rw-------. 1 root root 10021 9月 1 11:56 /var/log/secure
-rw-------. 1 root root 15821 8月 11 14:44 /var/log/secure-20190811
-rw-------. 1 root root 9131 8月 19 09:51 /var/log/secure-20190819
二、用户执行的任务工作:
某个用户或系统管理员定期要做的任务工作,例如每天晚上0点对tomcat日志进行切割及备份数据库数据,一般这些工作都需要由运维自行设置才行。
实例:每晚0点对tomcat日志进行切割
[root@node1 ~]# crontab –l
0 0 * * * /bin/sh /server/scripts/tomcat_backup.sh >/dev/null 2>&1
用户执行的工作,也就是我们运维管理人员执行的任务工作,因此用户执行的任务是本篇文章的重点。
1.2.2 Linux系统下的定时任务软件的种类
严格说,linux系统下的定时任务还真不少,例如:at,crontab,anacron
假如:某天晚上需要处理一个任务,仅仅是这一天的晚上,属于突发性的工作任务。要执行at命令,还需要启动一个atd的服务才行,在实际工作中,需要用到的时候几乎没有,因此此处也不详解。
crontab命令
正如前面所说的这个命令可以周期性的执行任务工作。
例如:每晚0点备份数据库数据。如果要执行crontab这个命令,也需要启动一个服务crond才行,此命令也是生产环境最常使用到的命令。
Centos7系统 查看crond服务是否开机自启
[root@node1 ~]# systemctl list-unit-files |grep crond
crond.service enabled
注:centos6系统应使用如下命令:
chkconfig –-list |grep crond
查看crond服务进程
[root@node1 ~]# ps -elf|grep [c]rond
4 S root 633 1 0 80 0 - 31555 hrtime 14:03 ? 00:00:00 /usr/sbin/crond -n
anacron:此命令主要用于非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作。
它会检测服务器停机期间应该执行,但是并没有执行的任务工作,并将该任务执行一遍。
小结:
- crond服务是运行的程序,而crontab是用来管理用户的定时任务(规则)的命令
- crond服务是企业生产工作中常用的重要服务,at和anacron可忽略使用方法
- 几乎每个服务器都会用到crond服务
1.3 定时任务crond使用说明
1.3.1 指令语法
crontab 【-u user】 {-l|-e|-r|-i}
查看系统帮助
man crontab
[root@node1 ~]# crontab --help
crontab:无效选项 -- -
crontab: usage error: unrecognized option
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging
Default operation is replace, per 1003.2
crontab –l查看当前用户的定时任务配置
[root@node1 ~]# crontab –l
0 0 * * * /bin/bash /server/scripts/tomcat_log_cut.sh >/dev/null 2>&1 #tomcat日志切割
crontab –e进入当前用户的定时任务vim编辑模式
[root@node1 ~]# crontab –e
#tomcat日志切割
0 0 * * * /bin/bash /server/scripts/tomcat_log_cut.sh >/dev/null 2>&1
~
~
crontab –u 用户名 –l查看指定用户的定时任务设置
[root@node1 ~]# crontab -u root –l
#tomcat日志切割
0 0 * * * /bin/bash /server/scripts/tomcat_log_cut.sh >/dev/null 2>&1
[root@node1 ~]# crontab -u node1 -l
no crontab for n