Linux任务计划(单一例行任务at与定时执行任务crontab)

单一例行任务

1、At命令

        at命令可以用来在某一时段执行一次任务,只会执行一次,不 会重复执行。
        at的守护进程atd会以后台模式运行,检查作业队列来运行。
        默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查队列中的所有作业运行时间, 如果时间与当前时间匹配,则运行此作业。(也就是说,at守护 进程的最小时间单位是分钟)

        注意:这里的队列并不是说第一个执行了后面的才能执行,每次都会检查所有的任务的

        保证atd进程的启动,可以使用相关指令来查看 ps -ef | grep atd

2、at指令详解

                        at 【选项】 【时间】

选项      含义        

-m

当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-latq 的别名,也就是显示atd的任务队列(queue)
-datrm 的别名,也就是清除队列
-v显示任务将被执行的时间
-c打印任务将被执行的时间
-V显示版本信息
-q<队列>使用指定的队列
-f<文件>从指定文件读入任务而不是从标准输入读入
-t<时间参数>一时间参数的形式提交要运行的任务
命令功能
at -l查看任务列表
at -c 任务号查看任务内容
at -r 任务号取消任务执行

3、at指定时间的方法

        1、接受在当天的hh:mm (小时:分钟)式的时间指定。假如该 时间已过去,那么就放在第二天执行。
        2、使用 midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等模糊的词语来指定时间。
        3、采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。               例如:12pm
        4、指定命令执行的具体日期,指定格式为 month day(月日) 或 mm/dd/yy (月/日/年) 或dd.mm.yy(日.月.年),指定的日期必须跟在指 定时间的后面。                例如:04:00 2021-03-1
        5、使用相对计时法。指定格式为:now + count time-units
                其中now就是当前时间,time-units是时间单位,这里能够是minutes(分钟),hours (小时)、days(天)、weeks(星期) count是时间的数量,几天,几小时。        例如:now + 5 minutes
        6、直接使用today (今天)、tomorrow(明天)来指定完成命令的时间。

4、案例

在使用之前要确保atd进程开启,使用 ps -ef | grep atd 查看,没有的话使用systemctl start atd启动

案例一:
要求:2天后的下午5点执行 /bin/ls/ /home

案例二
创建一个任务,1分钟后输入hello world到/tmp/t1文件

案例三:
明天17点钟,输出时间到指定文件夹中,比如/tmp/t2.log

5、at命令的白名单与黑名单

        为了安全起见,我们不能让任意用户都可以使用at命令,以防止主机被劫持或者被黑客利用, 所以我们还需要对at命令进行管控。主要通过两个文件来实现对 at命名使用的限制,在没有 这两个文件之前,at命令的执行是在编辑好任务后直接等待atd 服务的执行,但是在有这两个文件之后,at命令的执行就发生了改变,它首先要通过这两个文件进行用户的限制。

具体流程如下:

        要注意的是一般假设系统中所有用户都是可信任的,故而系统中 at.allow文件是默认不存在的, 而at.deny是默认存在且为空的,从而允许所有人都可以使用 at命令。

实验:限制用户使用at命令,实验开始前我们需要另外创建两个用户——fire和mars。
我们分别尝试: 将mars增加至at.allow文件中,观察:将fire增加至at.deny文件中,观察:

        1、创建用户
        

        2、将mars写入at.allow文件中,此时切换至两个用户观察他 们是否可以使用at命令:
        

        3、在两个文件都存在的情况下,将fire写入at.deny文件中
        

        4、此时切换至两个用户观察他们是否可以使用at命令
        

        在deny和allow文件都存在的情况下,我们的系统只会扫描读取allow文件中的内容, 此时我们的allow文件内容为空,也就意味着我们不允许任何用户使用at命令,当然linux系统中的超级用户——root除外。

定时执行任务

        定时执行的例行性工作:每隔一定的周期就需要执行一次 crontab。

1、crontab介绍:

        Crontab 是一个在 Unix 和 Linux 操作系统上用于定时执行任务的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。
         Crontab 是 crontable 的缩写,cron指的是Unix 系统中的一个后台进程,它用于执行预定的任务。

2、crontab 命令工作流程

        crontab 命令通常用于在 Linux 系统中设置定期执行的任务,并将这些任务存储在crontab 文件中。为了使用 crontab 命令,系统需要依赖crond 服务的支持。通常情况下,在操作系统安装时,crond服务会被默认安装并自动启动。crond进程会每分钟定期检查 crontab文件中的任务列表,以确定是否有需要执行的任务,如果有它会自动执行这些任务。当用户使用crontab命令新建任务计划之后,该项 jobs 就会被 /var/ spool/cron/ 目录下, 而且以用户账号来创建一个文件,每一项任务计划为一行。crond 检测的时间周期是 “分钟”,每分钟会读取一次 /etc/ crontab,以及 /var/spool/cron 里面的记录并执行。crond 执行的每一项任务计划,都会被记录到 /var/log/cron 这个日志文件。
        

        两个对象:
        后台服务crond ---->读取配置文件 crontab文件
        前台命令crontab---->结果配置文件 crontab文件
        通过: ps -ef |grep crond 验证是否后台服务启动

3、Crontab命令语法

        crontab [-u user] file crontab [-u user] [ -e | -l | - r ]
        -u user用来设定某个用户的crontab服务。
        -file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令, 并将它们载入crontab。
        -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当 前用户的crontab文件。
        -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
        -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户, 则默认删除当前用户的crontab文件。
        -i:在删除用户的crontab文件时给确认提示。以下是可以用于指定时间的特殊符号: "*" 代表所有的取值范围内的数字,任何时刻都接受。
特别要注意! "*/n" 表示每n个单位间隔         "-" 时间范围         "," 分隔的时段

4、Crontab计划任务的格式

        格式:分 时 天 月 周 用户 任务
        第1列分钟0~59
        第2列小时0~23(0表示子夜)
        第3列日1~31 第4列月1~12
        第5列星期0~7(0和7表示星期天)
        第6列要运行的命令
        
     ​

5、操作案例:

        crontab -e
        #编辑crontab文件内容
        #每天凌晨两点执行重启tfp共享服务
        00 02 * * * service vsftpd restart
        #查看当前有几条计划任务
        crontab -l
        

        #每个月的15号凌晨三点半重启服务器
        30 03 15 * * /usr/sbin/reboot        #系统命令需要输入命令路径,此路径用 whereis reboot查看

        #定时时间举例
        30 01 * * 7       每周日的凌晨一点半
        00 00 * * *        每天的凌晨十二点
        3 * * * *            每小时的第3分钟
        3 * * * 7           每个周日的每小时的第3分钟
        3 12 * * *         每天的12点3分
        3 12 * * 5        每周五的12点3分
        3 12 6 * *        每月6号的12点3分
        3 12 6 7 *       每年7月6号的12点3分

        ,:离散时间取值
        10,40 * * * *        每小时的第10分组和第40分钟
        10,40 * * * 2,5        每周二和五的每小时的第10和第40分钟

        -:连续时间点
        10 02 * * * 1-5        每周一到五的2点10分

        /:对应取值范围每多久一次
        */3 * * * * 每三分钟执行一次

其他案例(备份数据库):
        若没有安装MySQL先安装MySQL:
        dnf intstall mysql-server                #安装
        systemctl enable mysqld               #开机启动
        systemctl start mysqld                   #开启服务
        mysql_secure_installation             #初始密码和用户配置
        mysql -uroot -p                              #登录数据库

        #创建脚本文件
        mkdir /tmp/buckup
        vim mysql-backup.sh
        #!/bin/bash
        mysqldump -root -pabc123456 -B mysql > /tmp/backup/mysql.sql

        crontab -e
        #每一分钟执行备份数据库脚本
        */1 * * * * sh /root/mysql_buckup.sh

        #查看日志
        tail -f /var/log/cron

        #进入目录,库以及备份上了
        cd /tmp/backup/
        ls
        

  • 29
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值