Linux中滴计划任务

时间:2022-08-28 01:11:27

计划任务

计划任务(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

Linux中滴计划任务

时间数值的特殊表示方法

  • (星号)表示该范围内的任意时间

, 表示间隔的多个不连续时间点

_ 表示一个连续的时间范围

/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