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

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

相关推荐
大树884 分钟前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 分钟前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质30 分钟前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush434 分钟前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz1 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩2 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_2 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化