Linux————计划任务

计划任务

计划任务,就是有计划的任务,就是按照我们的的计划自动执行任务

计划任务有一次性计划任务和周期性计划任务

一次性计划任务

所谓一次性计划任务,就是按照计划只执行一次的任务。

无论是windows还是Linux都具备一次性计划任务的功能。

Linux中的at命令是用来创建一次性计划任务的,t命令有一个服务atd会以后台模式运行,检査当前的时间来决定是否运行"计划"。

atd服务会检査系统上的一个特殊目录来获取at命令的提交的"计划",默认情况下,atd服务每60秒检査一次目录,有"计划"时,会检査"计划"运行时间,如果"计划运行"的时间与当前时间匹配,则运行此"计划"。

创建一次性计划任务,并执行

查看服务是否开启

bash 复制代码
[root@bogon ~]# systemctl status atd
● atd.service - Deferred execution scheduler
     Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; preset: enabled)
     Active: active (running) since Fri 2024-03-15 13:26:26 CST; 37min ago
       Docs: man:atd(8)
   Main PID: 970 (atd)
      Tasks: 1 (limit: 22874)
     Memory: 312.0K
        CPU: 5ms
     CGroup: /system.slice/atd.service
             └─970 /usr/sbin/atd -f

Mar 15 13:26:26 bogon systemd[1]: Started Deferred execution scheduler.

编写备份yum仓库文件的脚本

bash 复制代码
[root@bogon ~]# cat backup-repo.sh 
#!/bin/bash
cp -r /etc/yum.repos.d /opt/yum-repo-backup-dir/yum.repos.d-`date "+%Y-%m-%d-%H:%M:%S"`.bak

设置权限

bash 复制代码
[root@bogon ~]# chmod +x backup-repo.sh 

执行计划任务

bash 复制代码
[root@bogon ~]# at now 
warning: commands will be executed using /bin/sh
at> /root/backup-repo.sh 
at> <EOT>
job 9 at Fri Mar 15 15:02:00 2024
  • -q:可以指定队列,队列有a-z总共26个队列

查看结果

bash 复制代码
[root@bogon ~]# date ; ls /opt/yum-repo-backup-dir/
Fri Mar 15 03:02:33 PM CST 2024
yum.repos.d-2024-03-15-15:02:26.bak

一次性计划任务管理

执行一次性计划任务

bash 复制代码
[root@bogon ~]# at now 
warning: commands will be executed using /bin/sh
at> /root/backup-repo.sh 
at> <EOT>
job 9 at Fri Mar 15 15:02:00 2024
  • at now :后面跟任务执行的时间

  • at> /root/backup-repo.sh:计划任务执行的任务脚本

  • Ctrl + d :提交计划任务

计划任务执行时间的写法有很多方式

  • at now:立即执行

  • at 5PM:当天的5点执行,如果超过这个时间,会在第二天的这个时间执行

  • at 6:22:当天的6:22点执行,如果超过这个时间,会在第二天的这个时间执行

  • at 2024-03-03:和at now一样,立即执行

  • at 12:12 2024-03-03:在2024年的3月3号12点12分执行

  • at 12:12 +5day:在五天之后的12点12分执行

查看一次性计划任务

atq

bash 复制代码
[root@bogon ~]# atq
3       Sat Mar 16 02:23:00 2024 a root
5       Sat Mar 16 02:26:00 2024 a root
6       Sat Mar 16 02:35:00 2024 a root

删除一次性计划任务

atrm at_id

bash 复制代码
[root@bogon ~]# atrm 3
[root@bogon ~]# atq
5       Sat Mar 16 02:26:00 2024 a root
6       Sat Mar 16 02:35:00 2024 a root

查看一次性任务的详细信息

at -c at_id

bash 复制代码
[root@bogon ~]# at -c 6
#!/bin/sh
# atrun uid=0 gid=0
...

一次性计划任务使用控制

bash 复制代码
[root@bogon ~]# ls /etc/at.deny 
/etc/at.deny
[root@bogon ~]# ls /etc/at.allow
ls: cannot access '/etc/at.allow': No such file or directory

在你的操作系统当中可能同时有多个用户在使用at命令设置一次性计划任务,那么你可以控制哪些用户可以使用计划任务,哪些用户不可以使用计划任务。

at一次性计划任务的白名单是at,a1low,黑名单是at.deny,不建议既使用黑名单,又使用白名单。建议使用白名单,白名单比黑名单力度要强。默认在rhel9系统中默认是没有at.allow文件的,可以自己创建。

at.allow的优先级是高于at.deny

周期性计划任务

周期性计划任务相比一次性计划任务来说相当于定制周期性的"计划"来执行某个任务,比如每分钟执行,每小时执行,每天执行,每周执行,每月执行,每天的03:88执行,每周三02:12执行,每月3号的84:16执行,每隔2分钟执行,每天的83:88,83:30执行等等

周期性计划任务的命令

  • crontab -e:编辑当前shell用户的计划任务

  • crontab -e -u user:编辑用户的计划任务,只有root用户才能编辑其他人的计划任务

  • crontab -l:列出当前用户的所有计划任务

  • crontab -l -u user:列出用户的计划任务

编辑计划任务的操作和vim编辑文件一样

* * * * *

第一个星,代表分钟(0-59)。如果为 0 ,就代表每个小时的整点;默认为*,表示每分钟运行一次

第二个星,代表小时(0-23)。如果为0,代表每天的0点;默认为*,表示每小时运行一次

第三个星,代表日(1-31),如果为1,代表一个月的第一天;默认为*,表示每天运行一次

第四个星,代表月(1-12),如果为1,代表一月份;默认为*,表示月运行一次

第五个星,代表星期(0-6),如果为0,代表周天;默认为*,表示周运行一次

bash 复制代码
# 一些计划任务格式实例
每分钟执行一次
* * * * * /root/x.sh

每小时的整点执行一次
0 * * * * /root/x.sh

每天凌晨1点准时运行
0 1 * * * /root/x.sh

每天凌晨1点这个小时中每分钟运行一次
* 1 * * * /root/x.sh

每月的第一天的每分钟运行一次
* * 1 * * /root/x.sh

1月份中每一天都执行
* * * 1 * /root/x.sh

每周周日的每一分钟,设置'周',尽量不要设置'日',容易产生歧义
* * * * 0 /root/x.sh

每五分钟一次
0/5 * * * *  /root/x.sh

每两个小时运行一次,从0点开始
* 0/2 * * * * /root/x.sh

每小时的第1分钟和第10分钟运行一次,例如:03:01,03:10
1,10 * * * * /root/x.sh

每小时的第15分钟到20分钟每分钟运行一次,一个小时总共运行6次
15-20 * * * * /root/x.sh

每年4月到6月,即4月、5月、6月的10号和15号,从0点开始,每2个小时在第1分,第2分,第5分到第8分分别执行
1,2,5-8 0/2 10,15 4-6 * /root/x.sh

除了crontab -e进行编辑计划任务,还可以在/etc/cronted文件下面编写,还有cron.daily/、cron.hourly/、cron.monthly/、cron.weekly/等目录下面,这种只能使用root用户来编辑

bash 复制代码
[root@bogon ~]# vim /etc/crontab   
[root@bogon ~]# cd /etc/cron.daily/  ## 存放的是每天自动执行的脚本
[root@bogon ~]# cd /etc/cron.hourly/  ## 存放的是每小时自动执行的脚本
[root@bogon ~]# cd /etc/cron.weekly/  ## 存放的是每周自动执行的脚本
[root@bogon ~]# cd /etc/cron.monthly/  ## 存放的是每月自动执行的脚本

/etc/cron.d目录下存放的文件格式和/etc/crontab的格式是一样的,是一个扩展目录,默认情况下也会读取里面的周期计划任务

/etc/下有cron.denycron.allow对计划任务的用户实现控制,白名单要强于黑名单

  • cron.deny:黑名单

  • cron.allow:白名单

创建一个周期性计划任务

查看服务是否开启

bash 复制代码
[root@bogon ~]# systemctl status crond.service 
● crond.service - Command Scheduler
     Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; preset: enabled)
     Active: active (running) since Fri 2024-03-15 13:26:26 CST; 2h 51min ago
   Main PID: 971 (crond)
      Tasks: 1 (limit: 22874)
     Memory: 1.2M
        CPU: 71ms
     CGroup: /system.slice/crond.service
             └─971 /usr/sbin/crond -n

Mar 15 14:21:01 bogon anacron[1722]: Job `cron.daily' terminated
Mar 15 14:21:01 bogon anacron[1722]: Normal exit (1 job run)
Mar 15 15:01:01 bogon CROND[2323]: (root) CMD (run-parts /etc/cron.hourly)
Mar 15 15:01:01 bogon run-parts[2326]: (/etc/cron.hourly) starting 0anacron
Mar 15 15:01:01 bogon run-parts[2332]: (/etc/cron.hourly) finished 0anacron
Mar 15 15:01:01 bogon CROND[2322]: (root) CMDEND (run-parts /etc/cron.hourly)
Mar 15 16:01:01 bogon CROND[2420]: (root) CMD (run-parts /etc/cron.hourly)
Mar 15 16:01:01 bogon run-parts[2423]: (/etc/cron.hourly) starting 0anacron
Mar 15 16:01:01 bogon run-parts[2429]: (/etc/cron.hourly) finished 0anacron
Mar 15 16:01:01 bogon CROND[2419]: (root) CMDEND (run-parts /etc/cron.hourly)

写一个脚本

bash 复制代码
[root@bogon ~]# cat x.sh 
#!/bin/bash
for i in {1..100}
do
        echo $i  >>/opt/num-`date "+%h-%H:%M:%S"`.txt
done

制作定时任务

bash 复制代码
[root@bogon ~]# crontab -e
* * * * * /root/x.sh

每隔以分钟查看一次

bash 复制代码
[root@bogon ~]# date;ls /opt/
Fri Mar 15 05:14:44 PM CST 2024
num-Mar-17:14:01.txt  yum-repo-backup-dir
[root@bogon ~]# date;ls /opt/
Fri Mar 15 05:15:02 PM CST 2024
num-Mar-17:14:01.txt  num-Mar-17:15:01.txt  yum-repo-backup-dir
[root@bogon ~]# date;ls /opt/
Fri Mar 15 05:16:53 PM CST 2024
num-Mar-17:14:01.txt  num-Mar-17:15:01.txt  num-Mar-17:16:01.txt  yum-repo-backup-dir

可以看到,每过一分钟,就会新添加一个文件

相关推荐
卓琢2 分钟前
(九)Shell 脚本(四):正则表达式、sed 和 awk 详解
linux·mysql·正则表达式
iangyu27 分钟前
docker常用命令
运维·docker·容器
一切皆是定数1 小时前
Linux驱动开发——LED驱动开发
linux·驱动开发·b树
小小不董1 小时前
图文深入理解Oracle DB Scheduler
linux·运维·服务器·数据库·oracle
繁依Fanyi1 小时前
旅游心动盲盒:开启个性化旅行新体验
java·服务器·python·算法·eclipse·tomcat·旅游
不烦下雨c2 小时前
[网络]抓包工具介绍 tcpdump
linux·tcpdump
南瓜小米粥、2 小时前
通过fdisk初始化Linux数据盘
linux·运维·服务器
秋风起,再归来~2 小时前
【Linux庖丁解牛】—Linux基本指令(中)!
linux·指令
Eternal-Student2 小时前
预处理、编译、汇编、链接
linux·汇编·windows
sp_wxf3 小时前
Stream流
linux·服务器·windows