计划任务:创建和管理在指定时间自动执行的任务
注意事项:要使计划任务在指定时间内自动运行,计划任务的服务必须能是开启的。
计划任务分为两类:
1、一次性计划任务
2、周期性计划任务
- 一次性计划任务
- 在指定的日期、时间点自动的执行预先设置的一些命令操作,属于一次性计划任务
- 系统服务的名称:/etc/init.d/atd
- 设置格式:
at [HH:MM] [yyyy-mm-dd]
- atq命令:查询当前设置的at任务列表 同
at -l
- atrm命令:删除指定任务编号的at任务
atrm 编号
同at -d
at -c 任务号
查看计划任务的具体内容(和at计划任务文件/var/spool/at/以a开头的文件内容相同)- at任务结束,文件消失
- 例:创建at计划任务(按ctrl +D提交任务)
[root@rhel3 ~]# at 02:35
at> ls /tmp
at> <EOT>
job 4 at 2019-03-29 02:35
查看计划任务
[root@rhel3 ~]# at -l
4 2019-03-29 02:35 a root
查看具体内容
[root@rhel3 ~]# at -c 4
当at任务执行结束,就查不到at任务,其计划任务文件也消失
[root@rhel3 ~]# at -l
[root@rhel3 ~]#
在/var/spool/mail/root下能看到at任务执行的结果(ls /tmp)
[root@rhel3 ~]# tail -14 /var/spool/mail/root
From [email protected] Fri Mar 29 02:35:01 2019
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Received: by rhel3.localdomain (Postfix, from userid 0)
id 89E17CC042B; Fri, 29 Mar 2019 02:35:01 +0800 (CST)
Subject: Output from your job 4
To: [email protected]
Message-Id: <[email protected]>
Date: Fri, 29 Mar 2019 02:35:01 +0800 (CST)
From: [email protected] (root)
yum.log
我们可以验证一下
[root@rhel3 ~]# ls /tmp
yum.log
[root@rhel3 ~]#
补充:
at命令常用格式:
at [HH:MM]
at [HH:MM] [yyyy-mm-dd]
at now +数字 [minutes|hours|days|weeks]
at 时间 -f 文件 使用文件中的命令作为计划任务
at now +5 minutes -f /root/test.sh
at计划任务还有两个文件:
/etc/at.deny----只有该名单里面的人不可以使用
/etc/at.allow-----只用该名单里面的人可以使用(这个文件一般不存在,如果需要,自行创建)
-
周期性计划任务
-
按照预先设置的时间周期(分钟、小时、天…)重复执行用户执行的命令操作,这属于周期计划人任务
-
服务名称:
/etc/init.d/crond
-
主要设置文件:用户定义的设置,位于文件
/etc/spool/cron/用户名
-
cron服务配置文件:
/etc/crontab
(包含三部分:注释、环境变量、cron命令) -
注意:crond计划任务里的命令有时可能不被执行,因为cron的环境变量PATH 跟系统的PATH 不太一样,它的PATH 路径默认值为:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
,所以这就造成很多命令不能使用,解决办法:1、自己设置cron的PATH环境变量 2、用命令的绝对路径,如ls
我们可以使用:/bin/ls
-
cron服务日志文件:
/var/log/cron
-
管理cron计划任务:
编辑计划任务:crontab -e [-u 用户名]
查看计划任务:crontab -l [-u 用户名]
删除计划任务:crontab -r [-u 用户名 ]
cron 命令的含义:
50 3 2 1 * run_commandfe
分钟 小时 日期 月份 星期 命令
注意:
root用户可以管理指定用户的计划任务,普通用户只能管理自己的计划任务
- 时间数值的表示方法:
* 表示该范围内的任意时间
, 表示间隔的多个不连续时间点
- 表示一个连续的时间范围
/n 指定间隔的时间频率
例:
0 17 * * 1- 5 周一到周五每天17:00
30 8 * * 1,3,5 每周一、三、五的8点30分
0 8-18 * * * 8点到18点整
0 12 */3 * * 每隔3天的12点整
- 例:
创建cron计划任务
[root@rhel3 ~]# crontab -e
no crontab for root - using an empty one
30 03 * * 1-5 /bin/ls
查看cron计划任务
[root@rhel3 ~]# crontab -l
30 03 * * 1-5 /bin/ls
也可以在/var/spool/cron/用户名下
查看
[root@rhel3 ~]# cd /var/spool/cron
[root@rhel3 cron]# ls
root
[root@rhel3 cron]# cat root
30 03 * * 1-5 /bin/ls
到达指定时间
[root@rhel3 ~]# date
Fri Mar 29 03:30:06 CST 2019
You have new mail in /var/spool/mail/root
在/var/log/cron
中可以看到cron执行的命令
[root@rhel3 cron]# tail -1 /var/log/cron
Mar 29 03:30:01 rhel3 CROND[2981]: (root) CMD (/bin/ls)
在/var/spool/mail/root
中可以查看执行的结果
[root@rhel3 ~]# tail -19 /var/spool/mail/root
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <root@rhel3> /bin/ls
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <[email protected]>
Date: Fri, 29 Mar 2019 03:30:01 +0800 (CST)
anaconda-ks.cfg
install.log
install.log.syslog
mysql-5.7.15-linux-glibc2.5-x86_64.tar.gz
检验一下:
[root@rhel3 ~]# ls
anaconda-ks.cfg install.log.syslog
install.log mysql-5.7.15-linux-glibc2.5-x86_64.tar.gz
删除cron计划任务:
[root@rhel3 cron]# crontab -r
[root@rhel3 cron]# crontab -l
no crontab for root
注意:在只有使用cron -r
命令时,它会删除所有的cron任务
如果要删除指定的cron任务,就需要在/var/spool/cron/root
中删除满足条件的一行