目录
1.计划任务概念解析
在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。通过安装at和crontabs这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。
分类:计划任务分为一次性和循环性的计划任务
2.一次调度执行at
2.1.作用
计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
2.2.语法
at <时间规格> :now +5min
>写执行的命令
2.3.示例
5分钟后:now +5min
下午茶时间:teatime tomorrow
(teatime is 16:00)
第四天中午:noon +4 days
2020年8月3日下午5点:5pm august 3 2020
某年某月某日某时:4:00 2019-11-27
2.4.示例:
例1: 设置一个定时创建用户的任务
[root@localhost ~ ]# yum -y install at
[root@localhost ~ ]# systemctl status atd //查看启动状态
[root@localhost ~ ]# systemctl start atd //首先要启动服务
[root@localhost ~ ]# at now +1min //一分钟后开始执行
at> useradd uuuu
at> <EOT> //Ctrl+D完成
job 1 at Sat Aug 26 10:54:00 2023
查询任务
[root@localhost ~]# atq
1 Sat Aug 26 10:54:00 2023 a root
[root@localhost ~]# at -l
[root@localhost ~]# at -c 工作号
验证结果
[root@localhost ~]# id uuuu //查出用户信息即可
删除任务:
[root@localhost ~]# atrm
[root@localhost ~]# at -d 工作号
例2:
[root@localhost ~]# vim at.jobs
useradd u99
useradd u00
touch /a.txt
[root@localhost ~]# at 20:33 < at.jobs
例3:
准备sudo用户
[root@localhost ~]# id jack
uid=1007(jack) gid=1012(jack) groups=1012(jack)
[root@localhost ~]# useradd jack #如果不存在创建
[root@localhost ~]# vi sudoers
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 jack ALL=(ALL) NOPASSWD: ALL #添加内容
[root@localhost ~]# su - jack
以sudo 用户jack创建at任务
[jack@localhost ~]$ vim jack.at
sudo useradd u200
sudo useradd u300
sudo touch /home/jack.txt
[jack@localhost ~]$ at 20:38 < jack.at
3.循环调度执行cron
用户级(重点)
3.1.简介
cron的概念和crontab是不可分割的。
crontab是一个命令,常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令。
该命令从标准输入设备读取指令,并将其存放于“/etc/crontab
”文件中,以供之后读取和执行。
3.2.安装软件
[root@localhost ~]# yum -y install crontabs //如果软件不存在安装
3.3.启动服务
rhel5/6:
[root@localhost ~]# /etc/init.d/crond status
[root@localhost ~]# /etc/init.d/crond start
rhel7:
[root@localhost ~]# systemctl start crond.service
[root@localhost ~]# systemctl status crond.service
[root@localhost ~]# systemctl enable crond.service //设置开机启动
3.4.开机启动
rhel5/6:
[root@localhost ~]# chkconfig crond on
rhel7:
[root@localhost ~]# systemctl status crond.service //查看服务状态
3.5.查看进程
[root@localhost ~]# ps -ef | grep crond
root 755 1 0 20:18 ? 00:00:00 /usr/sbin/crond -n
3.6.存储位置
(哪个用户创建的计划任务,在这个目录下以用户名的方式命名)
[root@localhost ~]# cd /var/spool/cron/
3.7.管理方式
crontab -l
—List the jobs for the current user. #列出当前用户的计划任务
crontab -r
—Remove all jobs for the current users. #删除当前用户所有的计划任务
crontab -e
—Edit jobs for the current user. #编辑当前用户的计划任务
管理员可以使用crontab -u username
, 去管理其他用户的计划任务
3.8.语法格式
Minutes Hours Day-of-Month Month Day-of-Week Command
分钟( 0-59) 小时(0-23) 日(1-31) 月(1-12) 周(0-7) 执行的命令,最好是命令的绝对路径
时间解释:
*/5 每隔分钟
, 不同的时间段
– 表示范围
3.9.示例
[root@localhost ~]# vim /home/soso.sh
#!/bin/bash
touch /opt/a.txt
[root@localhost ~]# chmod +x /home/soso.sh
创建计划任务
[root@localhost ~]# crontab -e //当前用户编写计划任务
(示例)
0 6 * * * /home/soso.sh //每天6:00执行
40 8 * * * /home/soso.sh //每天8:40执行
0 4 * * 6 /home/soso.sh //每周六凌晨4:00执行
5 4 * * 6 /home/soso.sh //每周六凌晨4:05执行
0 5 * * 6 /home/soso.sh //每周六凌晨5:00执行
30 9 * * 1-5 /home/soso.sh //每周一到周五9:30
0 8,9 * * 1-5 /home/soso.sh //每周一到周五8:00,每周一到周五9:00
59 23 * * 6 /home/soso.sh //每周六23:59
30 0 * * * /home/soso.sh //每天0:30
00 00 * * * /home/soso.sh //每天凌晨
00 02 * * * ls //每天2:00整
00 02 1 * * ls //每月1号2:00整
00 02 14 2 * ls //每年2月14号2:00整
00 02 * * 7 ls //每周日2:00整
00 02 * 6 5 ls //每年6月的周五2:00整
00 02 * * * ls //每天2:00整
*/5 * * * * ls //每隔5分钟
00 02 1,5,8 * * ls //每月1,5,8号的2:00整
00 02 1-8 * * ls //每月1到8号的2:00整
4.自动校时
实现服务器时间对时(ntp)
[root@localhost ~]# yum install ntp
[root@localhost ~]# ntpdate cn.pool.ntp.org
如果想每隔一定时间自动校时,只需将上面的命令加入至Cron就行了:
00 12 * * * /sbin/ntpdate cn.pool.ntp.org
cn.pool.ntp.org是ntp网络授时组织的中国授时源
5.使用其他用户创建
[root@localhost ~]# crontab -u jack -e //使用jack用户创建
[root@localhost ~]# crontab -u jack -l //查看jack用户的计划任务
[root@localhost ~]# crontab -r //删除当前用户的计划任务
[root@localhost ~]# crontab -u jack -r //删除jack用户的计划任务
使用者权限文件:
文件:/etc/cron.deny
说明:该文件中所列用户不允许使用crontab命令
文件:/etc/cron.allow
说明:该文件中所列用户允许使用crontab命令