Linux计划任务、周期性任务执行

Linux计划任务

  • 邮件服务
    • 本地电子邮件服务
    • maill命令
    • 邮件正文
    • 实例
  • at命令
    • 参数
    • TIME格式
    • 实例
  • cron计划任务
    • 任务分类
      • 系统cron任务
        • 系统crontab配置格式
      • 用户cron任务
        • 用户cron配置格式
    • 时间表示法
      • 特定值
      • *
      • 离散取值
      • 连续取值
      • 定义步长
      • 秒级别
    • crontab命令
      • 常用参数

邮件服务

本地电子邮件服务

  • smtp:Simple Mail Transmission Protocol
  • pop3:Post Office Protocol
  • imap4:Internet Mail Access Protocol

maill命令

语法:mailx [-s ‘SUBJECT’] username[@hostname]

邮件正文

  • 交互式输入:输入“.”,可以单独成行表示正文结束;ctrl+d提交也可以;
  • 通过重定向:将需要输入的内容通过重定向符号给到mailx命令;
  • 通过管道符:将前一个命令执行的结果,通过管道符传递给到mailx命令;

实例

[root@xuegod120 ~]# mailx -s 'hello world' root
hello world
.                        #输入点,直接结束交互式
EOT
[root@xuegod120 ~]# echo aaa > mailx -s 'hello world' root      #通过重定向发送邮件
You have mail in /var/spool/mail/root
[root@xuegod120 ~]# mail                                        #可以查看收到的邮件内容
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 root                  Tue Jun  2 10:23  18/557   "hello world"
& 1
Message  1:
From [email protected]  Tue Jun  2 10:23:40 2020
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Date: Tue, 02 Jun 2020 10:23:39 +0800
To: [email protected]
Subject: hello world
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: [email protected] (root)
Status: R

hello world
& q    #按下q键,退出

at命令

语法:at [OPTION]… TIME

参数

  • l:列出at的任务信息;等价于atq命令;
  • f /PATH/FROM/SOMEFILE/:从文件内读取任务;
  • d:删除对应的任务,等价于atrm命令;
  • c:查看对应任务的详细内容;

TIME格式

  • HH:MM:小时:分钟;
  • noon,midnight,teatime;
  • tomorrow;
  • now+#; #可以为minutes、hours、days、OR weeks;

实例

[root@xuegod120 ~]# at now+2min
at> ls /var/
at> <EOT>
job 3 at Tue Jun  2 10:37:00 2020
[root@xuegod120 ~]# atq
3	Tue Jun  2 10:37:00 2020 a root
[root@xuegod120 ~]# at -c 3
.......  #此处省略较多环境变量,主要任务在下面
ls /var/
[root@xuegod120 ~]# atq
3	Tue Jun  2 10:37:00 2020 a root
[root@xuegod120 ~]# atrm 3
[root@xuegod120 ~]# at -f /var/log/messages now+5min
job 4 at Tue Jun  2 10:42:00 2020
[root@xuegod120 ~]# atq
4	Tue Jun  2 10:42:00 2020 a root

cron计划任务

任务分类

系统cron任务

主要用于实现系统自身的维护,需要手动编辑/etc/crontab文件

系统crontab配置格式

SHELL=/bin/bash                           
PATH=/sbin:/bin:/usr/sbin:/usr/bin           #定义环境变量,此处环境不同于登录系统的,因此crontab里面的命令,建议使用绝对路径
MAILTO=root                                  #邮件发送用户,系统cron任务,发送给到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           #cron任务时间格式

用户cron任务

通过crontab命令进行操作

用户cron配置格式

SHELL=/bin/bash                           
PATH=/sbin:/bin:/usr/sbin:/usr/bin           #定义环境变量,此处环境不同于登录系统的,因此crontab里面的命令,建议使用绝对路径
MAILTO=root                                  #邮件发送用户,系统cron任务,发送给到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
# |  |  |  |  |
# *  *  *  *  *  command to be executed           #cron任务时间格式,相对于系统cron格式,少了username参数

时间表示法

特定值

给定时间点有效取值范围内的值;

3 * * * * :每小时第3分钟执行一次;
3 4 * * 5 :每周5的4点3分执行一次;
5 6 7 * * :每周日6点5分执行一次;
7 8 9 10 * :每年10月9日8点7分执行一次;

*

给定时间点上有效取值范围内的所有值;表示“每…”

* * * * * :每分钟执行一次;

离散取值

在时间点上使用逗号分隔多个值

9 8 * * 3,7 :每周三和周日8点9分执行一次;
0 8,20 * * 3,7 :每周三和周日8点和20点执行一次;

连续取值

在时间点上使用“-”连接开头和结束

0 9-18 * * 1-5 : 周一至周五的9点至18点执行一次;

定义步长

在时间点上使用“/”定时步长

*/5 * * * * : 每5分钟执行一次;
0 */2 * * 3,5 :每周三和周日,每隔2小时执行一次;

秒级别

cron任务默认只能定义到分钟级别,如果要定义到秒级别,需要通过第三方来实现,比如shell脚本等
通过sleep命令和shell脚本结合使用,实现秒级别调用

[root@xuegod120 ~]# cat test.sh 
#!/bin/bash
cat /etc/passwd
sleep 30
cat /etc/passwd
sleep 30
[root@xuegod120 ~]# crontab -e         #cron任务定义每分钟执行一次,但是脚本内分别是30s执行一次。结合就是没30s执行一次
* * * * * /bin/sh /root/test.sh

crontab命令

常用参数

  • e:编辑crontab任务;
  • l :查看任务;
  • u :给指定用户创建任务;
  • r :删除任务,默认移除当前用户下所有任务;

PS:定义COMMAND时,如果使用到%,需要对其进行转义;但放置于单引号中的%不用转义也可以;

你可能感兴趣的:(Linux回顾篇,Crontab,计划任务时间格式,计划任务使用)