Linux中滴计划任务
Posted fiveym
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中滴计划任务相关的知识,希望对你有一定的参考价值。
计划任务
计划任务
计划任务(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
Linux--计划任务!
linux中计划任务概述
设置某个时间来执行一些列命令实现任务,或者设置周期性的执行任务,例如提醒生日时间到了
linux计划任务种类
一、一次性的计划任务
由at命令设置一次性计划任务,注意要实现at命令必须要有atd这个服务才行,atd(这里的d表示守护进程,表示一直在后台运行的进程),事实上,我们用at这个命令产生要实现的任务,这个任务会加载进/var/spool/at目录下,然后等待atd这个服务的使用和执行
如果在at编写中的命令出现错误,at会默认发邮件给执行者,可在/var/spool/mail中查看
at 10:18 2021-08-05 :输入此命令会进入一个计划表中,我们将我们想要执行的任务写入该
执行表并按Ctrl+d,系统就会在2021-08-05 10:18这个时间段来执行这个计划任务
atq :查询已创建的一次性计划任务
at now +3min :两分钟后执行任务,后面的时间单位可以更换
atrm 任务号 :删除任务
[root@AIDEBOY ~]# at now +5min
at> touch whd
at> mv /root/whd /home<EOT>
job 7 at Thu May 13 14:59:00 2021
[root@AIDEBOY ~]# atq
7 Thu May 13 14:59:00 2021 a root
[root@AIDEBOY ~]# atrm 7
[root@AIDEBOY ~]# atq
[root@AIDEBOY ~]#
二、循环执行的计划任务
linux中用crontab这个命令来实现建立循环型计划任务,crontab命令建立任务后会记录在/var/spool/cron中
crontab -u :只有root才能执行这个任务,表示帮其他用户设置计划任务
crontab -l :查看crontab的任务内容
crontab -r :删除crontab内的所有计划任务内容
crontab -e :进入vim编辑界面,编辑计划任务
格式为: 分钟 小时 日期 月 周 命令串
时间的取值范围: 0-59 0-23 1-31 1-12 0-7
【周】中的0和7都表示星期天
时间的特殊符号:*表示该范围内的任意时间
,逗号表示表示多个时间点,比如【周】中1,3,5表示每周一、周三和周五
-表示连续的时间点,如【日期】中15-19,表示每15到19号
/表示指定时间间隔的频率,如【日期】中*/3,表示每三天,10-25/2表示10号到25号每三天执行一次
注意:后面的命令串中的命令最好用路径的方式表示
例子:编辑完跟vim编辑器一样wq退出即可
[root@AIDEBOY ~]# crontab -e
0 5-11 * * * /bin/rm -rf /var/www/html/*
#上午5点到晚上11点之间,每隔一小时清理/var/www/htmI目录-次
~
#假如你女友Luxi的生日是5月22,你想5月21日23:59给她发一封信,信在/home/lover.txt
59 23 21 5 * mail Luxi < /home/lover.txt
~
#每月每天凌晨3点30分和中午12点30分执行/tmp下的hello.sh脚本
30 3 * * * /bin/sh /tmp/hello.sh
30 12 * * * /bin/sh /tmp/hello.sh
~
#每月每天早.上8点到下午18点每隔2小时的每30分钟查看系统时间
30 8-18/2 * * /bin/date
~
-- INSERT --
注意:格式中没有几月几日且为星期几,例如本来想8月11号刚好是星期五执行任务
* * 11 8 5 命令串 :这里表示的可能为每8月内的每个星期5,而不是想要的8月11的星期5,与想要的规划不符
crontab的配置文件/etc/crontab,/etc/cron.d/
[root@AIDEBOY ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin //执行文件的查找路径
MAILTO=root //执行任务发生错误时会发送邮件给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
黑白名单
为了安全性的问题,可以设置限制at和crontab使用的账户
- 白名单:/etc/cron.allow和/etc/at.allow,默认两个文件是没有的,需要创建
将可以使用at或crontab的账号写入其中,不在这文件内的用户则不可以使用at或crontab - 黑名单:/etc/cron.deny和/etc/at.deny
记录在这文件内的账户则不可以使用at或crontab
当两名单同时存在时,比较优先级白名单比黑名单优先,两种只会存在一种名单限制
以上是关于Linux中滴计划任务的主要内容,如果未能解决你的问题,请参考以下文章