• Linux计划任务at和cron命令的使用


    文章目录

    前言

    什么是计划任务?

    一次性调度执行at

    简介

    服务启动

    语法

    参数:

    示例

    提交at作业

    提交步骤

    时间选择格式

    示例

    查看任务

    示例

    查看任务执行日志

    示例

    删除任务

    示例

    循环调度执行crontab命令

    简介

    查看服务(是否启动)

    创建计划

    编辑器中的语法格式

    示例

    代码中涉及到的任务信息解读

    查询计划

    删除计划

    总结


    前言

            前面学习了Linux中的软件管理,这篇文章将开始学习Linux中的计划任务,通过本篇文章将学习Linux中的一次性调度执行at命令和循环调度执行cron命令的介绍与使用,下面开始我们的Linux计划任务的学学习吧。


    什么是计划任务?

            划任务是系统的常见功能,利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行。任务计划在每次系统启动的时候启动并在后台运行。当我们需要在服务器上定时执行一些重复性的事件时使用的,可以通过计划任务程序来运行准备好的脚本、批处理文件夹、程序或命令,在某个特定的时间运行,目前最主要的用途是定期备份数据。。


    一次性调度执行at

    简介

            有些场景我们只是需要执行一次,执行完就结束任务我们使用at命令来操作,任务的执行日志以邮件的形式反馈给电脑。

    服务启动

            默认情况下所有的linux系统都提供此项功能。在redhat中atd是默认随系统启动而启动。

    1. [root@localhost ~]# ps -ef |grep atd
    2. root 1284 1 0 06:25 ? 00:00:00 /usr/sbin/atd -f
    3. root 12970 12205 0 10:51 pts/0 00:00:00 grep --color=auto atd
    4. 您在 /var/spool/mail/root 中有新邮件
    5. [root@localhost ~]# systemctl status atd.service
    6. ● atd.service - Job spooling tools
    7. Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
    8. Active: active (running) since 三 2022-11-02 15:48:16 CST; 4 days ago
    9. Main PID: 1284 (atd)
    10. Tasks: 1
    11. CGroup: /system.slice/atd.service
    12. └─1284 /usr/sbin/atd -f
    13. 1102 15:48:16 localhost.localdomain systemd[1]: Started Job spooling tools.
    14. 1107 10:40:00 localhost.localdomain atd[12686]: Starting job 1 (a0000101a82400)...)
    15. 1107 10:44:00 localhost.localdomain atd[12858]: Starting job 2 (a0000201a82404)...)
    16. Hint: Some lines were ellipsized, use -l to show in full.

    语法

    at    -参数   

    参数:

    • -m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
    • -I atq的别名
    • -d atrm的别名
    • -v 显示任务将被执行的时间
    • -c 打印任务的内容到标准输出
    • -V 显示版本信息
    • -q<列队> 使用指定的列队
    • -f<文件> 从指定文件读入任务而不是从标准输入读入
    • -t<时间参数> 以时间参数的形式提交要运行的任务

    示例

    1. [root@localhost ~]# at -v
    2. Garbled time
    3. [root@localhost ~]# at -V
    4. at version 3.1.13

    提交at作业

    提交步骤

    1. 输入at命令同时指定作业执行的时间 ,按下Enter键;
    2. 在at命令提示符“at >”下,输入命令或者shell脚本
    3. Ctrl+D 提交at作业。

    注意:如果如要执行多行命令,输入完一条命令,回车接着输入下一条,直到按Ctrl+D提交任务。

    时间选择格式

    now  +5min                                                        //现在的时间加5分钟

    时间   tomorrow (teatime    is  16:00)          //明天某时间执行

    5pm  august  3  2029                                        //2029年八月3日下午5点执行

    4:00   2019-11-27                                                //2019年11月27日4点执行

    示例

    1. [root@localhost ~]# date
    2. 20221107日 星期一 11:00:00 CST
    3. [root@localhost ~]# at now +5min
    4. at> ls
    5. at>
    6. job 3 at Mon Nov 7 11:05:00 2022
    7. [root@localhost ~]# at teatime tomorrow
    8. at> ls /test
    9. at>
    10. job 4 at Tue Nov 8 16:00:00 2022
    11. [root@localhost ~]# at 8:00 tomorrow
    12. at> ls /test
    13. at>
    14. job 5 at Tue Nov 8 08:00:00 2022
    15. at> useradd sure2023
    16. at>
    17. job 6 at Thu Aug 3 17:00:00 2023
    18. [root@localhost ~]# at 5:20 2023-5-20
    19. at> touch /test/love.txt
    20. at> echo "I Love You">> /test/love.txt
    21. at>
    22. job 8 at Sat May 20 05:20:00 2023

    查看任务

    命令:atq

    示例

    1. [root@localhost ~]# date
    2. 20221107日 星期一 11:08:25 CST
    3. [root@localhost ~]# atq
    4. 4 Tue Nov 8 16:00:00 2022 a root
    5. 5 Tue Nov 8 08:00:00 2022 a root
    6. 6 Thu Aug 3 17:00:00 2023 a root
    7. 8 Sat May 20 05:20:00 2023 a root

    时间已经过了11:05,所以3号任务已经被执行了,在计划列表内找不到了。

    查看任务执行日志

            任务执行日志以邮件的形式存在,位置在/var/spool/mail/root。

            通过mali查看

    示例

    1. [root@localhost ~]# mail
    2. Heirloom Mail version 12.5 7/5/10. Type ? for help.
    3. "/var/spool/mail/root": 3 messages
    4. > 1 root Mon Nov 7 10:40 15/514 "Output from your job "
    5. 2 root Mon Nov 7 10:44 24/601 "Output from your job "
    6. 3 root Mon Nov 7 11:05 15/516 "Output from your job "
    7. & 2
    8. Message 2:
    9. From root@localhost.localdomain Mon Nov 7 10:44:01 2022
    10. Return-Path:
    11. X-Original-To: root
    12. Delivered-To: root@localhost.localdomain
    13. Subject: Output from your job 2
    14. To: root@localhost.localdomain
    15. Date: Mon, 7 Nov 2022 10:44:01 +0800 (CST)
    16. From: root@localhost.localdomain (root)
    17. Status: RO
    18. anaconda-ks.cfg
    19. initial-setup-ks.cfg
    20. 公共
    21. 模板
    22. 视频
    23. 图片
    24. 文档
    25. 下载
    26. 音乐
    27. 桌面
    28. & q
    29. Held 3 messages in /var/spool/mail/root

    删除任务

    命令:atrm  任务号或者atrm文件名

            或者使用atrm的别名:at  -d

    示例

    1. [root@localhost ~]# atq
    2. 4 Tue Nov 8 16:00:00 2022 a root
    3. 5 Tue Nov 8 08:00:00 2022 a root
    4. 6 Thu Aug 3 17:00:00 2023 a root
    5. 8 Sat May 20 05:20:00 2023 a root
    6. [root@localhost ~]# atrm 4
    7. [root@localhost ~]# atq
    8. 5 Tue Nov 8 08:00:00 2022 a root
    9. 6 Thu Aug 3 17:00:00 2023 a root
    10. 8 Sat May 20 05:20:00 2023 a root

    4号任务已经被删除 。


    循环调度执行crontab命令

    简介

    cron的概念和crontab是不可分割的;

    crontab是一个命令,常见于Unix和Linux的操作系统之中;

    用于设置周期性被执行的指令;

    该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

    计划任务存储位置:/var/spool/cron/

    查看服务(是否启动)

    1. [root@localhost ~]# ps -ef |grep cron
    2. root 1288 1 0 06:25 ? 00:00:00 /usr/sbin/crond -n
    3. root 16413 12205 0 11:23 pts/0 00:00:00 grep --color=auto cron
    4. [root@localhost ~]# systemctl status crond.service
    5. ● crond.service - Command Scheduler
    6. Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
    7. Active: active (running) since 三 2022-11-02 15:48:16 CST; 4 days ago
    8. Main PID: 1288 (crond)
    9. Tasks: 1
    10. CGroup: /system.slice/crond.service
    11. └─1288 /usr/sbin/crond -n
    12. 1102 15:48:16 localhost.localdomain systemd[1]: Started Command Scheduler.
    13. 1102 15:48:16 localhost.localdomain crond[1288]: (CRON) INFO (RANDOM_DELAY will...)
    14. 1102 15:48:18 localhost.localdomain crond[1288]: (CRON) INFO (running with inot...)
    15. Hint: Some lines were ellipsized, use -l to show in full.

    如果服务没启动就用命令systemctl  start  需要启动的服务名   即可,cron程序运行是计划任务执行的根本。

    创建计划

    命令:crontab  -e      //编辑当前用户的,除了自身用户和root能查到,其他用户查不到。

    编辑器中的语法格式

    *    *    *     *     * (代表时间)command
    分  时  日   月   周
    min范围:1---59
    hours范围:1---23
    day范围:1---31
    month范围:1---12
    week范围:0---6(Sunday=0)

    分 时 日 月 周     命令或脚本程序

    留个部分用空格隔开,*表示站位符就算那里没有需要设置的内容也需要有*。

    示例

    1. [root@localhost ~]# crontab -e
    2. */5 * * * * echo "hello ">> /test/hello.txt
    3. 0 2 1,4,6 * * ls /
    4. 0 2 5-9 * * ls /
    5. 0 * * * * ls /
    6. 0 2 * * * ls /
    7. 0 2 14 * * ls /
    8. 20 5 20 5 * echo "i love you" >> /test/love.txt
    9. 0 2 * * 5 ls /
    10. 0 2 2 6 5 ls /

    代码中涉及到的任务信息解读

    */5 * * * *  echo "hello  ">>  /test/hello.txt              //每五分钟执行一次
    0 2 1,4,6 * *  ls /        //每月的1日,4日,6日的2:00执行一次
    0 2 5-9 * *  ls /           //每月的5日到9日的2:00执行一次
    0 * * * * ls  /                //每小时的第0分钟执行一次
    0 2 * * * ls /                //每天的2:00执行一次
    0 2 14 * *  ls  /            //每月的14号的2:00执行一次
    20  5  20  5 *   echo "i  love  you" >> /test/love.txt        //每年的5月20日的5:20执行一次
    0 2 * * 5   ls  /             //每月的周五的2:00执行一次
    0 2 2 6 5   ls   /                //每年的6月2日的2:00和每年6月周五的2:00都执行一次

    查询计划

    命令:crontab  -l

               管理员可以使用  -u  username,去管理其他用户的计划任务

    查看计划执行日志命令:mail

    1. [root@localhost ~]# crontab -l
    2. */5 * * * * echo "hello ">> /test/hello.txt
    3. 0 2 1,4,6 * * ls /
    4. 0 2 5-9 * * ls /
    5. 0 * * * * ls /
    6. 0 2 * * * ls /
    7. 0 2 14 * * ls /
    8. 20 5 20 5 * echo "i love you" >> /test/love.txt
    9. 0 2 * * 5 ls /
    10. 0 2 2 6 5 ls /
    11. 您在 /var/spool/mail/root 中有邮件

             每五分钟就会自动将hello写入到hello.txt中,说明任务计划设置成功,一般我们在生产环境中会用循环执行任务的操作用作备份。

    删除计划

    命令:crontab   -r       删除当前用户的计划。

    1. [root@localhost ~]# crontab -r
    2. [root@localhost ~]# crontab -l
    3. no crontab for root

    总结

            在备份数据的时候我们通常使用crontab命令,当只需要在指定时间仅需要执行一次就结束的时候我们使用at命令完成,本篇文章我们了解了Linux中的任务计划管理,学会使用at和crontab命令以及他们的应用场景。


    创作不易,动动小手给个点赞加关注吧,有什么意见评论区告诉我,一起学习。

  • 相关阅读:
    【Cookie,Session,Token,JWT的区别】
    【换根DP】CF1882 D
    设计模式-1.概述/UML类图/软件设计原则
    信息安全管理与评估赛题解析-应急响应(含环境)
    bat获取当前目录和上级目录
    中国人民大学加拿大女王金融硕士项目——只有不断提升自己,才能立于不败之地
    istio实战:springboot项目在istio中服务调用
    五金零售批发商城小程序的作用是什么
    车用尿素交易暴增丨化工出口ERP让业务管理更高效
    Java 中你绝对没用过的一个关键字?
  • 原文地址:https://blog.csdn.net/s1429583654/article/details/127725903