Linux计划任务-定时任务

Linux计划任务-定时任务

    • at单次计划任务
      • at命令格式
      • 查看at任务
      • 取消at计划任务
      • 创建1分钟后的单次任务
    • 定时任务分类
      • cron`系统任务调度`
        • /etc/crontab文件格式
      • 用户任务调度
      • 安装crontab
    • conrtab常用
      • 添加计划任务
        • 指定用户创建计划任务
      • 查看用户的计划任务
        • 计划任务日志存储目录
        • 查看所有用户的计划任务
      • 删除计划任务
      • 查看计划任务日志
      • 禁止任务发邮件
        • 方法1: `&>/dev/null`
        • 方法2:`MAILTO=""`
        • 清空邮件
    • 定时格式
      • 多个时间计划任务
      • 间隔时间计划任务
        • 每分钟执行一次的任务
      • 计划任务加锁

at单次计划任务

at命令:使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。

# 安装at
yum install at -y

# 开启atd服务
systemctl enable --now atd

对于其他用户,是否执行某个命令或脚本取决于/etc/at.allow


at命令格式

# at命令:时间 
# at>要运行的命令
[root@localhost ~]# at 11:32
at> ls
at> reboot
# 写完后CTrl+D 退出

at命令示例:

# 在22年6月8日上午10点执行slocate -u命令
at 10:00 6/8/22
at> socate -u
敲回车

在这里插入图片描述


查看at任务

# 显示用户待执行任务列表
[root@localhost ~]# atq
2	Fri Nov  5 08:08:00 2021 a root

# 查看任务
[root@localhost ~]# at -l
3   Sun Aug 15 11:36:00 2021 a root

# 查看指定编号的计划任务
## at -l 如果查看处有多条计划任务的话,用at -c 编号,即可查看信息
at -c 1

取消at计划任务

# 取消计划任务 atrm 编号
atrm 1

# -r 清除作业--可能不兼容该命令
## -m 作业完成后给用户发邮件
at -rm 作业id

# 查看计划任务是否已经删除
at -l

创建1分钟后的单次任务

at now + 1 min
> useradd tgb
# 写完后CTrl+D 退出

定时任务分类

Linux下的任务调度分为两类,系统任务调度用户任务调度

corn运行机制:
cron 会搜索 /var/spool/cron 目录,寻找以 /etc/passwd 文件中的用户名命名crontab文件,然后将crontab文件装入内存;
cron 还将搜索/etc/crontab文件,这个文件(cron时间表)是以特定格式写成的cron启动以后,先检查是否有用户设置了crontab文件,如果没有就转入睡眠状态,释放系统资源;所以该后台进程占用资源极少,之后每分钟被换醒一次,查看当前是否有需要运行的命令。


cron系统任务调度

系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
/etc/crontab文件,这个就是系统任务调度配置文件

cron系统调度进程可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。

# 系统级别的crontab会记录在该文件下
cat /etc/crontab

Linux计划任务-定时任务_第1张图片


/etc/crontab文件格式

/etc/crontab文件包括下面几行:

# 前四行是用来配置crond任务运行的环境变量
## SHELL变量指定了系统要使用哪个shell,这里是bash
SHELL=/bin/bash
## PATH变量指定了系统执行命令的路径
PATH=/sbin:/bin:/usr/sbin:/usr/bin
## MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
MAILTO=""
## HOME变量指定了在执行命令或者脚本时使用的主目录
HOME=/

# 任务部分
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

用户任务调度

用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
用户可以使用crontab工具来定制自己的计划任务。
crontab文件都被保存在/var/spool/cron目录中。其文件名用户名一致

# 该文件中所列用户不允许使用crontab命令
/etc/cron.deny

# 该文件中所列用户允许使用crontab命令
/etc/cron.allow

# 所有用户crontab文件存放的目录,以用户名命名
/var/spool/cron/

安装crontab

参考: https://blog.51cto.com/u_15175006/2720985

# yum安装crontab
yum install -y crontab

# 开机自启crond服务并现在启动
systemctl enable --now crond

conrtab常用

https://wangchujiang.com/linux-command/c/crontab.html

# 编辑该用户的计时器设置
crontab -e

# 列出该用户的计时器设置;
crontab -l

# 删除该用户的计时器设置;
crontab  -r <用户名称>

# 指定要设定计时器的用户名称。
crontab  -u <用户名称>

Linux计划任务-定时任务_第2张图片


添加计划任务

字段 描述
minute 分钟(0 – 59)
hour 小时(0 – 23)
day-of-month 一个月的第几天(1 – 31)
month-of-year 一年的第几个月(1 – 12)
day-of-week 一周的星期几(0 – 6),0 代表周日
commands 需要执行的命令
# 每周一上午 8:00 执行命令 
00 08 * * 1 commands
参数 描述
* 代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作
/ 可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
- 可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
, 可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
# 配置计划任务
crontab -e

# 配置规则
分 时 日 月 星期 (绝对路径)命令
# 示例 11:57 执行reboot
## &>/dev/null 禁止发邮件
57 11 * * * /usr/sbin/reboot &>/dev/null

# 查看计划任务
crontab -l

示例

# 例:晚上11点到早上8点之间每两个小时,在/tmp/test.txt文件中加入sleepy文本
* 23-8/2 * * * echo"sleepy" >> /tmp/test.txt

指定用户创建计划任务

# 指定用户创建计划任务
## -e 编辑crontab文件
## -u 用户名
crontab -e -u natasha

查看用户的计划任务

# 查看用户创建计划任务
## -u 用户名
## -l 列出crontab文件中的内容
crontab -u natasha -l

计划任务日志存储目录

/var/log/cron目录记录了Linux下所有用户计划任务信息,以crontab -u -e方式写入的计划任务都会在此目录下生成文件

# 查看计划任务
cat /var/log/cron

查看所有用户的计划任务

# 查看所有用户的计划任务
cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}

删除计划任务

## -r 删除crontab文件


查看计划任务日志

# 查看系统计划任务日志
tail --f /var/log/cron

# 使用关键字过滤计划任务日志
grep "alidata" /var/log/cron

禁止任务发邮件

计划任务每执行一次,就会发送一封邮件给管理员。

# 发送邮件给指定用户
MAILTO="raj"

方法1: &>/dev/null

# 示例 11:57 执行reboot
## &>/dev/null 禁止发邮件
57 11 * * * /usr/sbin/reboot &>/dev/null

## 5个*表示每分钟执行一次
## &>/dev/null表示禁止发邮件
* * * * * rsync -av --delete 10.0.0.8:/data/www/ /data/backup &>/dev/null

在这里插入图片描述


方法2:MAILTO=""

# 在任务的第一行指定邮件地址为空即可
MAILTO=""

在这里插入图片描述


清空邮件

# 清空收件箱
cat /dev/null > /var/spool/mail/root

定时格式

计划任务格式在线生成
https://crontab.guru/

Linux计划任务-定时任务_第3张图片


多个时间计划任务

# 配置示例--2点半,3点半,4点半执行任务
## 2点30分执行一次任务
## 3点30分执行一次任务
## 4点30分执行一次任务
30 2-4 * * * 命令

# 分钟间隔段执行命令
## 2点15分执行一次计划任务
## 2点30分执行一次计划任务
## 2点50分执行一次计划任务
15,30,50 2 * * * 命令

# 指定星期6的2:15,2:30,2:50执行计划任务
15,30,50 2 * * 6 命令

间隔时间计划任务

*/表示每隔多长时间执行任务

参考: https://www.runoob.com/w3cnote/linux-crontab-tasks.html

# 每间隔两小时的30分时执行一次计划任务 */2
## 分 时 日 月 星期 (绝对路径)命令
30 */2 * * * 命令

# 每间隔2分钟执行一次任务
## 分 时 日 月 星期 (绝对路径)命令
*/2 * * * * 命令

# 每周日23点0分自动清理日志
0 23 * * */0 echo " " > /alidata/tunnel.log

每分钟执行一次的任务

# 5个*表示每分钟执行
## &>/dev/null表示禁止发邮件
* * * * * rsync -av 10.0.0.8:/data/www /data/backip &>/dev/null

在这里插入图片描述


计划任务加锁

  • 延时任务
    • 例如重启时任务无法运行。
  • flok锁
    • 例如一个备份没完成,又一个备份开始

Linux计划任务-定时任务_第4张图片

你可能感兴趣的:(Linux,计划任务,定时任务,crontab)