计划任务
类型:
一次性计划任务
周期性计划任务
一次性计划任务
前提: atd服务必须运行
at -c : 查看计划任务的具体内容
[root@www Packages]# yum install -y at ----安装atd服务
[root@www ~]# systemctl start atd ------启动atd服务
[root@test01 ~]# systemctl status atd ----查看atd服务状态
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2017-02-17 17:26:29 CST; 3h 57min ago
Main PID: 1269 (atd)
CGroup: /system.slice/atd.service
└─1269 /usr/sbin/atd -f
2月 17 17:26:29 localhost.localdomain systemd[1]: Started Job spooling tools.
2月 17 17:26:29 localhost.localdomain systemd[1]: Starting Job spooling tools...
[root@test01 ~]# systemctl is-active atd.service
active ----活跃的
制订一次性计划任务
1.date : 查看系统时间
[root@localhost ~]# date
Wed Mar 13 04:05:17 EDT 2024
[root@fenglei ~]# date +%h
3月
[root@fenglei ~]# date +%m ----查看月份
03
[root@fenglei ~]# date +%T ----查看具体时间
19:42:23
[root@fenglei ~]# date +%H v ----查看时间
19
[root@fenglei ~]# date +%m-%T ----查看月份和时间
03-19:36:48
[root@localhost ~]# date +%Y-%m-%d -----查看年月日
2024-03-13
[root@localhost ~]# date +%Y-%m-%d-%T
2024-03-13-04:10:28
2.修改时间
修改时间:
月日时分年
[root@localhost ~]# date 031510102024
Fri Mar 15 10:10:00 EDT 2024
[root@localhost ~]# date 31510102024
date: invalid date ‘31510102024’
[root@localhost ~]# date 031510102024
3.制定一次性任务
# at <TIME>
1.在2024年3月14日20:52 创建2052.txt文件
[root@VM-0-10-centos ~]# date
Thu Mar 14 20:47:31 CST 2024
[root@VM-0-10-centos ~]# at 20:52
at> touch 2052.txt<EOT>
job 12 at Thu Mar 14 20:52:00 2024
(按ctrl+D提交任务,而ETO>表示已经提交任务)
2.从现在开始后的一分钟创建/tmp/aaaa目录
[root@localhost ~]# at now + 1 minute
at> mkdir /tmp/aaaa
at> <EOT>
job 2 at 2016-11-20 13:16
删除at任务
[root@www ~]# atrm 2 ---作业号
[root@www ~]# at -d 3
查看at任务
[root@www ~]# at -l
2 Fri Nov 10 11:26:00 2017 a root
at计划任务的保存位置
/var/spool/at/
周期性计划任务
1.什么是crontab?
Crontab 是一个在 Unix 和 Linux 操作系统上用于定时执行任务的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写,cron指的是 Unix 系统中的一个后台进程,它用于执行预定的任务。
2.安装crontab服务
一般情况下crond服务在安装系统的时候会被默认安装,并自动运行。
centos 或者红帽系统下检查服务是否安装
安装crond:
[root@fenglei ~]# yum -y install crontabs
启动crond服务:
[root@fenglei ~]# systemctl status crond
关闭crond服务:
[root@fenglei ~]# systemctl stop crond
crond设置开机自启动:
[root@fenglei ~]# systemctl enable crond
前提: crond服务必须运行
[root@test01 ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2017-02-17 17:26:29 CST; 4h 1min ago
Main PID: 1267 (crond)
CGroup: /system.slice/crond.service
└─1267 /usr/sbin/crond -n
3.**制订周期性计划任务 *
# crontab -e
时间 COMMAND命令
查看crontable文件
[root@fenglei ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
第一行 SHELL 变量指定了系统要使用哪个 shell,这里是 bash
第二行 PATH 变量指定了系统执行命令的路径
第三行 MAILTO 变量指定了 crond 的任务执行信息将通过电子邮件发送给 root 用户(如果 MAILTO 变量的值为空,则表示不发送任务执行信息给用户)
最后一行是 Crontab 的条目,基本格式如下:
* * * * * user-name command to be executed
其中,星号代表通配符,表示可以匹配任何值。每个星号代表不同的时间单位:
第一个星号表示分钟(0-59)
第二个星号表示小时(0-23)
第三个星号表示一个月中的某一天(1-31)
第四个星号表示月份(1-12或者用缩写,如1表示一月,2表示二月)
第五个星号表示星期几(0-7或者用缩写,0和7都表示星期日,1表示星期一,以此类推)
注意:
#周和日最好不要同时用
#定时任务一定会是绝对路径
# crontab -e
时间 COMMAND命令
时间:
分 时 日 月 周
分钟:0----59
时: 0----23
日期:1----31
月: 1----12
周: 0----6 7
示例:
每天晚上11:30 30 23 * * *
每天零点 0 0 * * *
每周五下午4点整 0 16 * * 5
连续的时间 5 8-14 * * *
不连续的时间 5 8,10,12 * * *
每5分钟 */5 * * * *
*/5 * * * * date >> /tmp/date.txt 每5分钟一次
00 10 * * * date >> /tmp/date.txt 每天的10点
20 10 * * * date >> /tmp/date.txt 每天10点20
20 10 10 * * date >> /tmp/date.txt 每月的10号的10点20
20 10 10 10 * date >> /tmp/date.txt 每年10月10号10点20
20 10 10 10 7 date >> /tmp/date.txt 每个周日或者每年的10月10号10点20分
20 10,15,20 10 * * date >> /tmp/date.txt 每月10号10点,15点,20点的20分
20 10,15,20 10-15 * * date >> /tmp/date.txt 每月10号到15号的10点,15点,20点的20分
10,20,30 10 10-15 * * date >> /tmp/date.txt 每月10号到15号的10点的10分,20分,30分
50 23 * * *
COMMAND命令:
1 建议写命令的完整路径 /bin/mkdir /abc
2 只能写一条命令(shell脚本)
首先运行 crontab -e 的命令:
示例: 每5分钟在/tmp目录创建当时时间的日志文件
[root@localhost ~]# crontab -e
*/5 * * * * touch /tmp/file-$(date +\%Y\%m\%d\%H\%M\%S)
保存并退出编辑器
示例:每个月15号,30号的8点30分,13点50分在/var/dir1目录创建一份日志文件
crontab -e
30 8 15,30 * * touch /var/dir1/log_$(date +\%Y\%m\%d_\%H\%M).txt
50 13 15,30 * * touch /var/dir1/log_$(date +\%Y\%m\%d_\%H\%M).txt
注意:
# 写命令时%在周期性计划任务中是结束的意思,因此在使用%时,需要加\右斜杠转义
# &> /dev/null 不给用户发送邮件
# %T :时间,等于%H:%M:%S
# %F :日期,等于%Y-%m-%d
示例:每半个小时分别显示内存,CPU、磁盘使用状态信息
(1) 创建脚本文件
#!#bin/bash
echo "内存剩余容量为:"
free -m |grep Mem | awk -F" " '{print $4}'
echo "磁盘剩余容量为:"
df -Th | grep sda3 |awk -F" " '{print $5}'
echo "系统平均负载:"
echo "一分钟负载为:"
uptime | awk -F":" '{print $5}' |cut -d, -f 1
echo "五分钟负载为:"
uptime | awk -F":" '{print $5}' |cut -d, -f 2
echo "十五分钟负载为:"
uptime | awk -F":" '{print $5}' |cut -d, -f 3
[root@localhost tmp]# crontab -l
*/1 * * * * /bin/bash /tmp/test.sh >> /tmp/test.txt
--------------------
脚本2:
[root@localhost tmp]# cat system.sh
#!/bin/bash
echo "内存使用情况:"
free -m
echo "cpu使用情况:"
lscpu |grep CPU\(s\) |head -1
echo "硬盘使用情况: "
df -Th
(2)编辑计划任务
[root@test01 ~]# crontab -e
*/1 * * * * /bin/bash /tmp/1.sh >> /tmp/test.txt &> /dev/null
删除周期性计划任务
# crontab -r >>> 会删除所有计划任务
作业:备份etc目录,要求:
-
每两分钟备份/etc目录到/tmp/back
# crontable -e
# */2 * * * * rsync -avz /etc/ /tmp/backrsync -----用于文件和目录的快速、可靠的远程同步和备份。
-
每天备份的文件名包含当天的日期,如2016-03-09_etc.tar.gz
先写个脚本
!/bin/bash
backup_dir="/tmp/back"
date_format=$(date +%Y-%m-%d)
backup_file="${backup_dir}/${date_format}_etc.tar.gz"rsync -avz /etc/ "${backup_dir}/"
然后清理旧的备份文件,保留最近7天的备份
find "${backup_dir}" -name "*.tar.gz" -type f -mtime +7 -delete
最后将以上脚本保存为backup.sh文件,并赋予执行权限,就可以执行shell
chmod +x backup.sh
crontab -e
*/2 * * * * sh backup.sh