目录
计划任务
计划任务概念解析
在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。通过安装at和crontabs这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontabs命令进行计划任务设置。
计划任务分为一次性和循环性的计划任务
一次调度执行-----at
作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
一次性调度执行 at---实战
语法格式:at [参数] [时间] 设置按时执行任务(只能执行一次)
at <时间规格> :now +5min
>写执行的命令
atrm 序号 删除序号对应的计划任务
atq 查看所有计划任务
at -c 序号 查看序号对应的计划内容
可写hours、days、weeks 为单位
例1:
[root@linux-server ~ ]# yum -y install at
[root@linux-server ~ ]# systemctl status atd #查看启动状态(atd,进程名)
[root@linux-server ~ ]# systemctl start atd #首先要启动服务
[root@linux-server ~ ]# systemctl enable --now atd #设置开机自启
[root@linux-server ~ ]# at -l #列出计划任务
[root@linux-server ~ ]# at now +1min #一分钟后开始执行
at> useradd uuuu
at> <EOT> #Ctrl+D完成
job 1 at Sat Mar 21 22:34:00 2015
[root@linux-server ~]# id uuuu
例2:
[root@linux-server ~]# vim at.jobs
useradd u99
useradd u00
touch /a.txt
[root@linux-server ~]# at 20:33 < at.jobs #计划20:33输出at.jobs的内容
例3:
1. 准备sudo用户
[root@linux-server ~]# id jack
uid=1007(jack) gid=1012(jack) groups=1012(jack)
[root@linux-server ~]# useradd jack #如果不存在则创建jack用户
[root@linux-server ~]# visudo #编辑sudoers文件,更改允许哪些用户和组运行sudo
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 jack ALL=(ALL) NOPASSWD: ALL #添加内容
[root@linux-server ~]# su - jack #切换为jack用户
以sudo 用户jack创建at任务
[jack@linux-server ~]$ vim jack.at
sudo useradd u200
sudo useradd u300
sudo touch /home/jack.txt
[jack@linux-server ~]$ at 20:38 < jack.at
更多使用案例
at 5:00pm+2 days #2天后的下午5点执行命令
at 08:00am tomorrow #明天上午8点,执行命令
循环调度执行cron 用户级
安装软件
[root@linux-server ~]# yum -y install crontabs #如果软件不存在安装
启动服务(rhel5/6)
[root@linux-server ~]# /etc/init.d/crond status
[root@linux-server ~]# /etc/init.d/crond start
开机启动(rhel5/6)
[root@linux-server ~]# chkconfig crond on
rhel7:
[root@linux-server ~]# systemctl start crond.service #启动服务
[root@linux-server ~]# systemctl enable crond.service #设置开机启动
[root@linux-server ~]# systemctl status crond.service #查看服务状态
[root@linux-server ~]# systemctl is-enabled crond #查看服务是否已设置为开机启动
enabled (使用sudo或以root身份运行该命令)
[root@linux-server ~]# ps -ef | grep crond
root 755 1 0 20:18 ? 00:00:00 /usr/sbin/crond -n
存储位置
[root@linux-server ~]# cd /var/spool/cron/
/var/spool/cron/ 目录存放的是用户的crontab任务,任务以创建者的名字命名。
/etc/crontab 文件负责调度各种管理和维护任务。
/etc/cron.d/ 目录存放任何要执行定时任务的crontab文件或脚本。
管理方式:
crontab -l #列出当前用户的计划任务(无法查看其他用户的定时任务)
crontab -r #删除当前用户所有的计划任务
crontab -e #编辑当前用户的计划任务
管理员可以使用
-u username #去管理其他用户的计划任务
语法格式 :
Minutes Hours Day-of-Month Month Day-of-Week Command
分钟 小时 日 月 周 执行命令或文件
0-59 0-23 1-31 1-12 0-7
命令:
在定时任务命令中引用到具体的文件、脚本或命令时,最好使用绝对路径来确保正确执行。这是因为定时任务的执行环境可能与你当前的工作目录不同。
时间:
* 每代表所有。星号通常用于表示时间字段中的"任意值"
/数 斜杠用于指定时间字段的步长。它表示将时间字段跳过一定数量的取值
*/5 每隔5分钟
, 中文逗号用于将多个时间字段的取值组合在一起,“或”,表示选择一个时间点执行
, 英文逗号用于分隔多个独立的时间字段取值
- 表示连续的时间范围
实战
[root@linux-server ~]# vim /home/soso.sh # 创建脚本
#!/bin/bash # 声明当前脚本使用/bin/bash解析器
mkdir /mnt/test
touch /opt/a.txt
mv /opt/a.txt /mnt/test
[root@linux-server ~]# chmod +x /home/soso.sh #添加所有人对脚本的执行权限
创建计划任务
~]# crontab -e #当前用户编写计划任务
0 6 * * * /bin/bash /home/soso.sh #每天6:00执行脚本
5 4 * * 6 /home/soso.sh #每周六4:05执行脚本(绝对路径执行脚本)
40 8 * * * /bin/touch /a.txt #每天8:40创建文件
0 4 * * 6 /bin/mkdir /opt/cron #每周六4:00创建目录
0 5 * * 6 /bin/rm -rf /opt/* #每周六5:00执行删除文件
~]# echo "0 1 * * * /usr/sbin/ntpdate pool.ntp.org") | crontab -
#向用户的cron任务列表中添加一条新的定时任务的,如校准时间
查看计划任务
~]# crontab -l #列出计划任务
~]# tail -f /var/log/cron #实时显示cron日志,观察