前言

  1. 更好熟悉掌握at、crontab定时自定义任务用法。
  2. 实验at、crontab定时自定义任务运用场景案例。
  3. 作业、笔记需要。

定时计划任务相关命令及配置文件简要说明

  • at 工具

    • 由包 at 提供

    • 依赖与atd服务,需要启动才能实现at任务

    • at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下

      执行任务时PATH变量的值和当前定义任务的用户身份一致

    • at格式

      at [option] TIME
    • 常见参数:

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

    • cronie:主程序包,提供crond守护进程及相关辅助工具

    • crontabs:包含CentOS提供系统维护任务

    • cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如:cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务cron

    • 依赖于crond服务,确保crond守护处于运行状态:

    #CentOS 7 以后版本:
    systemctl status crond
    #CentOS 6:
    service crond status
    • crontab命令格式

      crontab [-u user] [-l | -r | -e] [-i]
    • crontab常用命令

      -l 列出所有任务
      -e 编辑任务
      -r 移除所有任务
      -i 同-r一同使用,以交互式模式移除指定任务
      -u user 指定用户管理cron任务,仅root可运行
    • 配置文件:/etc/crontab

      [root@localhost ~]# vim /etc/crontab
      SHELL=/bin/bash #默认的SHELL类型
      PATH=/sbin:/bin:/usr/sbin:/usr/bin #默认的PATH变量值,可修改为其它路径
      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

    m h dom mon dow command

            • user-name command to be executed

    | | | | | |

    | | | | | --- 预执行的命令

    | | | | ----- 表示星期0~7(其中星期天可以用0或7表示)

    | | | ------- 表示月份1~12

    | | --------- 表示日期1~31

    | ----------- 表示小时1~23(0表示0点)

    ------------- 表示分钟1~59 每分钟用*或者 */1表示


    - 计划任务时间表示法: ```sh
    (1) 特定值
    给定时间点有效取值范围内的值
    (2) *
    给定时间点上有效取值范围内的所有值,表示“每...”,放在星期的位置表示不确定
    (3) 离散取值
    #,#,#
    (4) 连续取值
    #-#
    (5) 在指定时间范围上,定义步长
    /#: #即为步长
    (6) 特定关健字
    @yearly 0 0 1 1 *
    @annually 0 0 1 1 *
    @monthly 0 0 1 * *
    @weekly 0 0 * * 0
    @daily 0 0 * * *
    @hourly 0 * * * *
    @reboot Run once after reboot

自定义任务案例

  1. 案例:一次性在今天16:20分,自动在/data/目录下创建文件

    [16:10:57 root@localhost ~]#at 16:20
    warning: commands will be executed using /bin/sh
    at> touch /data/file1.txt
    at> <EOT>
    job 12 at Tue Aug 23 16:20:00 2022 [16:12:36 root@localhost ~]#at 16:20 2022-08-23
    warning: commands will be executed using /bin/sh
    at> touch /data/file02.txt
    at> <EOT>
    job 13 at Tue Aug 23 16:20:00 2022 [16:13:39 root@localhost ~]#at now + 6 min
    warning: commands will be executed using /bin/sh
    at> touch /data/file03.txt
    at> <EOT>
    job 14 at Tue Aug 23 16:20:00 2022 [16:17:18 root@localhost ~]#at 04pm + 20 min
    warning: commands will be executed using /bin/sh
    at> touch /data/file4.txt
    at> <EOT>
    job 16 at Tue Aug 23 16:20:00 2022
  2. 明天凌晨 01:06重启httpd服务,并发送邮件通知是否成功

    [01:04:56 root@rocky8_31 ~]#at 01:06
    warning: commands will be executed using /bin/sh
    at> systemctl restart httpd &>/dev/null ;if [ $? -eq 0 ] ;then { echo $(hostname -I) http服务重启成功|mailx -s "重启服务通知" 1024320609@qq.com ; } ;else { echo $(hostname -I)http服务重启成功|mailx -s "重启服务警告" 1024320609@qq.com ;} ;fi
    at> <EOT>
    job 5 at Tue Aug 30 01:06:00 2022

  3. 每周二凌晨打包/etc/下所有文件到/data/目录下后

    [02:16:37 root@rocky8_31 ~]#crontab -l
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    1 * * * * echo %IP_$PATH >> /root/text.txt
    17 2 * * 2 tar -cf /data/etc/etc_$(date +"\%F_\%T").tar.gz /etc/* &> /dev/null & if [ $? -eq 0 ] ;then { echo $(hostname -I):etc目录打包备份成功|mailx -s "数据备份通知" 1024320609@qq.com ; } ;else { echo $(hostname -I):etc目录打包备份失败|mailx -s "数据备份警告" 1024320609@qq.com ;} ;fi

  4. 每分钟自动检查内存超过百分之80%,将自动邮箱报警

    [16:08:45 root@rocky8_31 ~]#vim memcheck.sh
    
      1 #!/bin/bash
    2 # **********************************************************
    3 #
    4 # * Author : 张雪龙
    5 # * Email : 1024320609@qq.com
    6 # * Create time : 2022-08-30 16:05
    7 # * Filename : memcheck.sh
    8 # * Description :
    9 #
    10 # **********************************************************
    11
    12
    13
    14 str=$(free|awk '/^Mem/{if($3/$2>0.65)printf("当前内存:%.2fG,内存占比:%.2f%\n", $3/1024/1024,$3/$2*100)}')
    15 [ $str ]&&{ echo $str|mailx -s "$(hostname -I |awk 'NR==1{print $1}'):内存警告通知" 1024320609@qq.com ;} [16:09:49 root@rocky8_31 ~]#vim /etc/crontab 1 SHELL=/bin/bash
    2 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    3 MAILTO=root
    4
    5 # For details see man 4 crontabs
    6
    7 # Example of job definition:
    8 # .---------------- minute (0 - 59)
    9 # | .------------- hour (0 - 23)
    10 # | | .---------- day of month (1 - 31)
    11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    13 # | | | | |
    14 # * * * * * user-name command to be executed
    15
    16 */1 * * * * root bash /root/memcheck.sh

  5. 每十分钟自动检查硬盘分区超过百分之80%,将自动邮箱报警

    #1、执行的脚本
    [16:47:26 root@rocky8_31 ~]#vim check_disk.sh 1 #!/bin/bash
    2 # **********************************************************
    3 #
    4 # * Author : 张雪龙
    5 # * Email : 1024320609@qq.com
    6 # * Create time : 2022-08-30 16:47
    7 # * Filename : check_disk.sh
    8 # * Description :
    9 #
    10 # **********************************************************
    11
    12
    13 str=$(df -h|awk -F" +|%" '/^\/dev\/(nvm|sdb)/{print $5}'|sort -rn|head -n 1)&&[ $str -gt 24 ]&&{ echo 磁盘分区空间使用率 $str% |mailx -s "$(hostname -I |awk 'NR==1{print $1}'):磁盘警告通知" 1024320609@qq.com ;} #2、编辑自定义任务
    [16:50:25 root@rocky8_31 ~]#vim /etc/crontab
    1 SHELL=/bin/bash
    2 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    3 MAILTO=root
    4
    5 # For details see man 4 crontabs
    6
    7 # Example of job definition:
    8 # .---------------- minute (0 - 59)
    9 # | .------------- hour (0 - 23)
    10 # | | .---------- day of month (1 - 31)
    11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    13 # | | | | |
    14 # * * * * * user-name command to be executed
    15
    16 #0 */1 * * * root bash /root/memcheck.sh
    17 */1 * * * * root bash /root/check_disk.sh #3、运行结果

  6. 每日统计网站IP访问量(以Apache访问日志为例),将自动发送邮箱

    #1、日志文件格式
    [18:24:12 root@rocky8_31 ~]#tail /var/log/httpd/access_log-20220828
    192.168.100.1 - - [27/Aug/2022:05:34:49 +0800] "GET / HTTP/1.1" 200 18 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
    192.168.100.31 - - [27/Aug/2022:14:52:40 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"
    192.168.100.31 - - [27/Aug/2022:14:52:41 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"

192.168.100.31 - - [27/Aug/2022:14:52:42 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"

192.168.100.31 - - [27/Aug/2022:14:52:42 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"

192.168.100.31 - - [27/Aug/2022:14:52:43 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"

192.168.100.31 - - [27/Aug/2022:14:52:43 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"

192.168.100.31 - - [27/Aug/2022:14:52:44 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"

192.168.100.31 - - [27/Aug/2022:14:52:45 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"

192.168.100.31 - - [27/Aug/2022:14:52:48 +0800] "GET / HTTP/1.1" 200 18 "-" "curl/7.61.1"

2、编辑定时任务

[18:24:58 root@rocky8_31 ~]#crontab -l

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

25 18 * */1 * echo -e " 访问量 IP地址\n $(cat /var/log/httpd/access_log-20220828|awk '{print $1}'|sort |uniq -c|sort -nr|head -n 3)"| mailx -s "$(hostname -I |awk 'NR==1{print $1}'):网站访问IP统计" 1024320609@qq.com

运行显示结果


![image-20220830182649078](https://img2022.cnblogs.com/blog/1301995/202208/1301995-20220830235634825-1458225311.png) 7. 统计192.168.100.0网络正在使用的IP地址,并发送到企业微信群中。 ```sh
#企业微信上传脚本
[23:24:20 root@rocky8_31 ~]#vim weixin2.sh 1 #!/bin/bash
2 # **********************************************************
3 #
4 # * Author : 张雪龙
5 # * Email : 1024320609@qq.com
6 # * Create time : 2022-08-30 22:20
7 # * Filename : weixin2.sh
8 # * Description :
9 #
10 # **********************************************************
11
12 #!/bin/bash
13 content=${@:1}
14 content=${content//\ /}
15 content=${content//\"/}
16 date=$(date +%Y-%m-%d)
17 time=$(date "+%H:%M:%S")
18 content="
19 **WGCLOUD**
20 >告警时间:$date.$time
21 >告警详情:$content
22
23
24 "
25 webHookUrl="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=9d3676eg-4f6e-7fgf-2325-06976f5qt580"
26 content='{"msgtype": "markdown","markdown": {"content": "'$content'","mentioned_list":"@all"},}'
27 echo "content : $content"
28 curl --data-ascii "$content" $webHookUrl
29 echo "over!" #异步ping脚本,并执行weixin2.sh上传通知消息
[23:34:19 root@rocky8_31 ~]#vim check_ip.sh 1 #!/bin/bash
2 # **********************************************************
3 #
4 # * Author : 张雪龙
5 # * Email : 1024320609@qq.com
6 # * Create time : 2022-08-30 23:12
7 # * Filename : check_ip.sh
8 # * Description :
9 #
10 # **********************************************************
11
12 NET=192.168.100
13 > /root/hosts.txt
14 for i in {1..254};do
15 {
16 if ping -c1 -W1 $NET.$i &> /dev/null ;then
17 echo $NET.$i, | tee -a /root/hosts.txt
18 fi
19 }&
20 done
21
22 bash /root/weixin2.sh "$(cat /root/hosts.txt) \n网络通常" #2、编辑定时任务
[23:47:20 root@rocky8_31 ~]#crontab -l
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
50 23 * */1 * bash /root/check_ip.sh #消息到企业微信结果显示

7个自定义定时任务并发送消息至邮箱或企业微信案例(crontab和at)的更多相关文章

  1. 利用laravel-echo主动向服务端发送消息,实现在线状态管理

    之前在网上翻了半天,也没有找到关于如何 通过laravel-echo主动发送消息 和 在laravel-websockets中自定义控制器 的文章或教程.无奈之下只能翻laravel-echo和lar ...

  2. Java企业微信开发_05_消息推送之发送消息(主动)

    一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...

  3. Java企业微信开发_04_消息推送之发送消息(主动)

    源码请见: Java企业微信开发_00_源码及资源汇总贴 一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息 ...

  4. Java发送企业微信应用消息

    1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接收到消息后,再 ...

  5. Java企业微信开发_05_消息推送之被动回复消息

    一.本节要点 1.消息的加解密 微信加解密包 下载地址:http://qydev.weixin.qq.com/java.zip      ,此包中封装好了AES加解密方法,直接调用方法即可. 其中,解 ...

  6. 用过企业微信APP 后,微信接收不到消息,解决方案

    用过企业微信APP 后,微信接收不到消息的,怎么办? 请打开企业微信,找到:我----设置----新消息通知----仅在企业微信中接收消息

  7. TT企业微信社群辅助,企业微信社群辅助工具,允许批量添加好友,自动同意添加请求,自动回复消息

    TT企业微信社群辅助,企业微信社群辅助工具,允许批量添加好友,自动同意添加请求,自动回复消息 界面截图 TT企业微信社群辅助工具下载 链接: https://pan.baidu.com/s/1Y2An ...

  8. Netty框架问题记录1--多线程下批量发送消息导致消息被覆盖

    业务背景 项目是基于Netty实现的实时课堂项目,课堂中老师需要对试卷进行讲解,则老师向服务器发送一个打开试卷信息的请求,服务器获取试卷信息,将试卷信息发送给所有的客户端(学生和老师). 发送给学生的 ...

  9. log4j2发送消息至Kafka

    title: 自定义log4j2发送日志到Kafka tags: log4j2,kafka 为了给公司的大数据平台提供各项目组的日志,而又使各项目组在改动上无感知.做了一番调研后才发现log4j2默认 ...

随机推荐

  1. php 访问控制可见性 public protected private

    对属性或方法的访问控制,是通过在前面添加关键字public(公有),protected(受保护的),private(私有)来实现. 被定义为公有的类成员可以在任何地方被访问. 被定义为受保护的类成员则 ...

  2. 【翻译】驯服野兽:Scylla 如何利用控制理论来控制压实

    教程翻译自Seastar官方文档:https://www.scylladb.com/2018/06/12/scylla-leverages-control-theory/ 转载请注明出处:https: ...

  3. 3.shell脚本循环试题

    shell脚本循环试题 1.计算从1到100所有整数的和 #!/bin/bash a=0 for i in {1..100} #1到100 #每次循环变量i的值也为循环次数 do a=$[ $a + ...

  4. iOS全埋点解决方案-APP和H5打通

    前言 ​ 所谓的 APP 和 H5 打通,是指 H5 集成 JavaScript 数据采集 SDK 后,H5 触发的事件不直接同步给服务器,而是先发给 APP 端的数据采集 SDK,经过 APP 端数 ...

  5. 使用HBuilder X编辑器安装终端窗口插件未响应的解决方案

    一.打开HBuilder X根目录 依次找到main.js HBuilderX \ plugins \ builtincef3terminal \ script \ main.js 二.编辑main. ...

  6. 所有人都说Python 简单易学,为何我觉得难?

    来谈谈心 记得刚学Python的时候,几乎所有人都说Python 简单易学,而对于编程零基础,只掌握Word和Excel的人来说,感觉真的好难. 学习之前网上的教材看了,Python的书也看了,包括& ...

  7. Codeforces Round #790 (Div. 4) A-H

    Codeforces Round #790 (Div. 4) A-H A 题目 https://codeforces.com/contest/1676/problem/A 题解 思路 知识点:模拟. ...

  8. Tapdata 携手精诚瑞宝,共拓 Real Time DaaS 蓝海市场

      2021年10月22日,深圳钛铂数据有限公司「Tapdata」 与精诚瑞宝计算机系统有限公司「精诚瑞宝」战略合作签约仪式在深圳举行,Tapdata 创始人唐建法先生与精诚瑞宝副总经理余灿雄先生签署 ...

  9. Tomcat深入浅出——Session与Cookie(四)

    一.Cookie 1.1 Cookie概念 Cookie:有时也用其复数形式 Cookies.类型为"小型文本文件",是某些网站为了辨别用户身份,进行Session跟踪而储存在用户 ...

  10. 字符输入流_Reader类&FileReader类介绍和字符输入读取字符数据

    java.io.Reader:字符输入流的最顶层父类,其中定义了一些共性的成员方法,是一个抽象类共性的成员方法 int read() 读取单个字符并返回 int read(char[] cbuf) 将 ...