计划任务
计划任务
计划任务(Cron Job)是指在预定的时间自动执行一些指定的任务或脚本。在Linux和Unix系统中,计划任务由Cron(Cron daemon)服务来实现。Cron服务可以在规定的时间执行一些命令或程序,比如定时备份数据库、定时清理垃圾文件、定时发送邮件等。
daemon:守护进程,一直在内存里运行的进程,知道我们人为停止他的运行,不然他是一直在内存中运行的,因为一直在内存中运行,所以我们的用户可以随时去访问。
计划任务分类
使用at命令调用atd进程设置在某个特定的时间,执行一次任务
使用crontab命令调用crond进程,设置按固定的周期(如每天,每周等)重复执行预先计划好的任务
at命令
在特定的日期、时间点自动执行预选设置的一些命令操作,属于一次性计划任务
系统服务的名称: /etc/init.d/atd
设置格式:at [HH:MM] [yyyy-mm-dd]
[root@kafka3 lianxi]# service atd start 启动atd服务,不然不会定时去执行任务
Redirecting to /bin/systemctl start atd.service
您在 /var/spool/mail/root 中有新邮件
[root@kafka3 lianxi]# at 23:00 创建一个一次性执行的计划任务
at> bash /root/6.sh
at> <EOT>
job 6 at Sun Mar 26 23:00:00 2023
[root@kafka3 lianxi]# at -l 查看计划任务的列表
3 Sun Mar 26 20:29:00 2023 a root
6 Sun Mar 26 23:00:00 2023 a root
[root@kafka3 lianxi]# atrm 3 删除计划任务编号为3的任务
[root@kafka3 lianxi]# at -l
6 Sun Mar 26 23:00:00 2023 a root
存放一次性计划任务的目录
[root@kafka3 ~]# cd /var/spool/at
[root@kafka3 at]# ls
a0000601ab34c4 spool
[root@kafka3 at]# cd ..
[root@kafka3 spool]# ls
anacron at cron lpd mail plymouth postfix
[root@kafka3 spool]# pwd
/var/spool
load average
[root@kafka3 ~]# uptime
15:49:45 up 4 min, 2 users, load average: 0.00, 0.04, 0.03
三个数值分别为 1分钟、5分钟、15分钟前到现在的可运行或者不可中断的进程的平均值。
可以理解为就绪队列里的进程的数量
CPU的就绪队列里的进程的数量
电脑只有一个核心,就绪队列里有一个进程在排队,就算法CPU已经满负荷运转了,如果超过1就更加忙了
电脑有八个核心,就绪队列里有8个进程在排队,就算法CPU已经满负荷运转,如果超过8更加忙了
crontab命令
- 按照预先 设置的时 间舟曲(分钟,小时,天…),重复执行用户指定的命令操作,属于周期性计划任务
- 服务名称: /etc/init.d/crond
- 主要设置文件
- 用户定义的设置,位于文件:/var/spool/cron/用户名
[root@kafka3 ~]# cd /var/spool/
[root@kafka3 spool]# ls
anacron at cron lpd mail plymouth postfix
[root@kafka3 spool]# cd cron
[root@kafka3 cron]# ls
[root@kafka3 cron]# pwd
/var/spool/cron 存放crontab创建的周期性计划任务的
[root@kafka3 cron]#
[root@kafka3 cron]# ps aux|grep crond 服务是默认安装的,而且开机自动启动
root 734 0.0 0.0 126384 1620 ? Ss 15:45 0:00 /usr/sbin/crond -n
root 1868 0.0 0.0 112824 988 pts/0 S+ 16:51 0:00 grep --color=auto crond
配置文件通常包含三个部分
注释
环境变量
cron命令
[root@kafka3 cron]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@kafka3 cron]# crontab -l
30 3 * * * /root/sc.sh
[root@kafka3 cron]#
[root@kafka3 cron]# useradd wwjz
[root@kafka3 cron]# su - wwjz
[wwjz@kafka3 ~]$ crontab -e
no crontab for wwjz - using an empty one
crontab: installing new crontab
[wwjz@kafka3 ~]$ crontab -l
40 4 * * * bash ~/sc.sh
[wwjz@kafka3 ~]$ cd /var/spool/cron/
-bash: cd: /var/spool/cron/: 权限不够
[wwjz@kafka3 ~]$ exit
登出
[root@kafka3 cron]# ls
root wwjz
crontab是创建管理周期性计划任务的命令,最小的时间间隔是1分钟
-e表示创建一个计划任务 edit
-l表示查看计划任务列表
cron服务配置文件
位于文件:/etc/crontab
cron服务的日志文件
位于文件:/var/log/cron
可以知道一个计划任务是否执行
记录创建,查看,执行等相关的操作
[root@kafka3 log]# crontab -e
crontab: installing new crontab
[root@kafka3 log]# crontab -l
30 3 * * * bash /root/sc.sh
*/1 * * * * bash /root/wang.sh
[root@kafka3 log]# cat cron
Mar 27 17:15:00 kafka3 crontab[1935]: (root) LIST (root)
Mar 27 17:15:01 kafka3 crond[734]: (root) RELOAD (/var/spool/cron/root)
Mar 27 17:15:01 kafka3 CROND[1937]: (root) CMD (bash /root/wang.sh)
您在 /var/spool/mail/root 中有新邮件
[root@kafka3 log]#
[root@kafka3 log]# yum install ntpdate -y
censtos7里可以使用ntpdate命令同步时间(和互联网的时间服务器同步时间)
centos8里 chrony服务
[root@kafka3 log]#ntpdate time.windows.com
27 Mar 17:56:40 ntpdate[2212]: adjust time server 20.189.79.72 offset -0.003294 sec
时间数值的特殊表示方法
- (星号)表示该范围内的任意时间
, 表示间隔的多个不连续时间点
_ 表示一个连续的时间范围
/n 指定间隔的时间频率
应用实例
- 0 17 * * 1-5
- 30 8 * * 1,3,5
- 0 8-18 * * *
- 0 12 */3 * *
案例
1,编写一个/backup/backup_log.sh脚本实现备份/var/log目录下所有的文件到/backup目录下,要求文件名是包含当天日期,精确到秒,文件名例名例如:2022-3-3-3_40_20_log.tar.gz同时要求删除/backup目录下七天的备份文件,只保留最近7天的,
1,以root用户的身份去执行,计划任务的要求是每天的4:30执行上面的这个脚本/backup/backup_log.sh
[root@kafka3 backup]# pwd
/root/backup
您在 /var/spool/mail/root 中有新邮件
[root@kafka3 backup]# cat backup_log.sh
#!/bin/bash
mkdir -p /backup
tar -czf /backup/$(date +%F_%H_%M_%S)-log.tar.gz /var/log
find /backup -mtime +7 -type f -name "*.tar.gz" -exec rm -rf {} \;
[root@kafka3 backup]# crontab -e
crontab: installing new crontab
您在 /var/spool/mail/root 中有新邮件
[root@kafka3 backup]# crontab -l
30 4 * * * bash /root/backup/backup_log.sh
[root@kafka3 log]# pwd
/var/log
[root@kafka3 log]# cat cron
.........
Mar 27 04:30:01 kafka3 CROND[2598]: (root) CMD (bash /root/backup/backup_log.sh)
[root@kafka3 log]#
ps:周和日,月不可同时并存,容易导致时间混乱
anacron服务
- 弥补cron在系统关机后不能执行计划任务的问题
- 不能替代cron
- 按天、周或月为单位去检查系统未进行的cron任务
- /var/spool/anacron
- 服务名称:/etc/init.d/anacrond