一、计划任务分类
1.使用at命令调用atd进程设置在某个特定的时间,执行一次性任务
2.使用crontab命令调用crond进程,设置按固定的周期(如每天、每周等)重复执行预先计划好的任务
二、一次性计划任务设定:
前提:service atd start,用ps -ef 查看进程是否开启
1、一次性计划任务常用命令
at命令
在指定的日期、时间点自动执行预先设置的一些命令操作,属于一次性计划任务
Ctrl+d保存退出
系统服务的名称:/etc/init.d/atd
设置格式:at [HH:MM] [yyyy-mm-dd]
at命令常用时间格式:
at [HH:MM]
at [HH:MM] [yyyy-mm-dd]
at now + 数字 [minutes|hours|days|weeks]
atq命令
用途:查询当前设置的at任务列表
同at -l
atrm 编号
用途:删除指定任务编号的at任务
同at -d
at 时间 -f 文件
使用文件中的命令作为计划任务
at now + 5 minutes -f /root/test.sh
at -c 任务号 :查看任务的具体内容(相当于cat下某个文件)
at 计划任务文件位置
/var/spool/at/a开头的文件
任务执行完毕,文件消失
[root@111 ~]# date
Sat Mar 23 14:57:40 CST 2019
[root@111 ~]# ls /tmp-----------/tmp目录是空目录
[root@111 ~]# at 15:01
at> touch /tmp/at.txt-----------设定一次性计划任务,在/tmp/目录下创建at.txt文件
at>
job 2 at 2019-03-23 15:01
[root@111 ~]# atq------------查看计划任务,刚才设定的计划任务的编号是2,2不是总的计划任务数,要分清楚
2 2019-03-23 15:01 a root
[root@111 ~]# at -c 2----------查看计划任务的内容涉及什么
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0----------------以下省略许多
touch /tmp/at.txt
[root@111 ~]# cd /var/spool/at-------切换到计划任务文件位置
[root@111 at]# ls
a00002018b07e5 spool
[root@111 at]# cat a00002018b07e5------相当于at -c 2
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0-----------以下省略许多
touch /tmp/at.txt
[root@111 at]# date-------时间点已经到了执行计划任务的15:01
Sat Mar 23 15:01:18 CST 2019
[root@111 at]# ls /tmp----------计划任务执行成功,at.txt文件已经创建
at.txt
[root@111 at]# ls----------计划任务执行成功,文件消失
spool
2、设定计划任务权限
计划任务并非每个用户都可以创建,以下两个文件设置任务的权限
/etc/at.deny:只有该名单里面的人不可以使用(默认情况下所有用户都可以添加一次性任务)
/etc/at.allow:只有该名单里面的人可以使用
[root@111 ~]# ls /etc/at.deny
/etc/at.deny
[root@111 ~]# ls /etc/at.allow-------------默认情况下只有/etc/at.deny文件
ls: cannot access /etc/at.allow: No such file or directory--------并且/etc/at.deny是空文件,标志着所有用户都能设置任务
[root@111 ~]# cat /etc/at.deny
三、周期计划任务:
按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作,属于周期性计划任务
1、管理cron计划任务
服务名称:/etc/init.d/crond
用户定义的设置,位于文件:/var/spool/cron/用户名
编辑计划任务:crontab -e [-u 用户名]
#加用户名代表为这个用户创建周期计划任务 #就是调用vim打开/var/spool/cron/下的文件
查看计划任务内容:crontab -l [-u 用户名] #调用cat命令读取/var/spool/cron/文件内容
删除计划任务:crontab -r [-u 用户名] 删除当前用户的周期计划任务文件
#调用rm删除/var/spool/cron/下文件,如果只想删除一个计划任务,用crontab -e打开,再去删除某行
注意:root用户可以管理注定用户的计划任务,普通用户只能管理自己的计划任务
2、cron命令含义
分钟 | 取值从0-59之间的任意整数 |
小时 | 取值从0-23之间的任意整数 |
时间数值的特殊表示方法:
* 表示该范围内的任意时间
, 表示间隔的多个不连续时间点
- 表示一个连续的时间范围
/n 指定间隔的时间频率
应用示例
0 17 * * 1-5 周一到周五每天五点
30 8 * * 1,3,5 周一、周三、周五 每天8点半
0 12 */3 * * 每间隔三天的12点整
注意:
1.资源分配不均
多个计划任务同时运行
2.安全检查
防止有非法计划任务
3.周和日、月不可同时并存
容易导致计划任务时间混乱
3、crond进程配置文件的通常包含三个部分 :/etc/crontab文件
注释、环境变量、cron命令
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin(相比较平时命令行少,因此命令不在配置文件的4个路径下就会找不到,因此需要用到绝对路径)
[root@localhost ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin
四、计划任务实验:
示例1(root用户):
每天早上7:50自动开启sshd服务,22点50时关闭
每隔5天的12点整清空一次FTP服务器公共目录/var/ftp/pub
每周六的7:30时,重新启动httpd服务
每周一、三、五的17:30时,打包备份/etc/httpd目录
[root@111 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@111 ~]# which service
/sbin/service
[root@111 ~]# which rm
alias rm='rm -i'
/bin/rm
[root@111 ~]# which tar
/bin/tar
[root@111 ~]# crontab -e
[root@111 ~]# crontab -l
50 7 * * * service sshd start
50 22 * * * service sshd stop
0 12 */5 * * rm -rf /var/ftp/pub/*
30 7 * * 6 service httpd restart
30 17 * * 1,3,5 tar -cf /etc/httpd.tar /etc/httpd
示例2(jerry用户):
每周日晚上23:55时将“/etc/passwd”文件的内容复制到宿主目录中,保存为pwd.txt文件
注意:宿主目录指的是jerry用户的家目录,家目录的表示方法都是~符号,表示的是/home/jerry
方法1、此时登录为root用户,root用户去创建jerry用户的周期任务
[root@111 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@111 ~]# crontab -e -u jerry
[root@111 ~]# crontab -l -u jerry
55 23 * * 7 cp /etc/passwd /home/jerry/pwd.txt
方法2、也可以切换到jerry用户再去创建周期任务
[jerry@111 ~]$ id
uid=501(jerry) gid=501(jerry) groups=501(jerry)
[jerry@111 ~]$ crontab -e
[jerry@111 ~]$ crontab -l
55 23 * * 7 cp /etc/passwd /home/jerry/pwd.txt
注意问题:在执行周期任务的时候,是将命令写到shell脚本,去执行脚本
1、计划任务source 脚本
2、给脚本加x权限,计划任务写命令时指定绝对路径
示例3:为root用户编写计划任务:每周2、4、6的10点到17点的每隔5分钟自动将passwd、shadow这2个重要系统文件归档到username.备份的日期和时间.tar.gz这种名称的文件里(例如:root.201202011615.tar.gz)备份文件放到/opt/目录下面,并且每成功备份一个文件就发一封邮件到root用户的邮箱,邮件内容是“username.备份的日期和时间.tar.gz is ok”。
1、编写脚本3.sh
tar czf /opt/root.$(date +%Y%m%d%H%M).tar/gz /etc/passwd /etc/shadow
2、写计划任务(设定的是每分钟执行一次,便于排错)
[root@111 opt]# crontab -l
* * * * * source /opt/scripts/3.sh
[root@111 opt]# ls
rh rpm_tar_test scripts
[root@111 opt]# date
Sat Mar 23 16:38:01 CST 2019#
[root@111 opt]# ls
rh root.201903231638.tar.gz rpm_tar_test scripts