之前笔者是在本地写的博客,然后用 windows 定时任务启动写的脚本上传到 Github 上,现在又遇到了 Linux 上的定时任务,项目还要用到 Quartz 定时任务框架

1. 一次性定时任务 at

at 命令是用于一次的定时任务,使用起来十分简便,而且定时的日期多样化,注意其需要 atd 服务的支持

1.1 查询 atd 是否启动

一般系统(Linux)都自带并自启 atd,可用以下两个命令查询服务是否启动

$ systemctl status atd
# Active: active (running) $ ps -ef | grep atd
# root 1212 1 0 Jun14 ? 00:00:00 /usr/sbin/atd -f

1.2 at 命令格式

at 有两种命令,格式如下:

# 第一种
$ at 时间
$ > 输入要执行的内容
$ > EOF(Ctrl + D,表示输入结束)
# 第二种
$ 将要执行的命令 | at 时间

笔者下面使用第一种格式来演示命令的使用

1.3 at 命令参数

at 的命令参数也十分简单,看看就会使用了

$ at  [参数]  [时间]

	-l:待执行的任务列表
-d:删除指定的待执行任务
-m:任务执行完后向linux用户发送,即时没标准输出
-f:指定包含具体指令的任务文件
-q:指定新任务的队列名称
-c: 打印任务的内容到标准输出 $ atq 待执行的任务列表(等价于 $ at -l)
$ atrm 删除待执行的任务(等价于 $ at -d)

1.4 用例

$ date 查看当前时间
# Sat Jul 31 13:38:35 CST 2021 $ at 13:40
$ > ls >> at.out
$ > EOF # 然后就会在当前目录下看到一个 at.out 文件

2. 周期定时任务 crontab

crontab 命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似。系统会自动启动 crond 进程每分钟定期检查是否有要执行的任务

使用crontab需要知道了解几个概念:

  • crond:一个服务进程,每分钟去检查配置文件是否有要执行的任务
  • 任务文件:记录了需要执行的任务
  • crontab:修改任务文件的工具(即往配置文件里面增删定时任务)

2.1 配置文件

Linux下的任务调度分为:

  • 系统调度:系统周期性要执行的任务(写缓存到硬盘、日志清理等,在/etc/crontab文件中配置)
  • 用户调度:用户定期要执行的任务(数据备份、定时邮件等,在/var/spool/cron/用户名为名的文件中配置)

使用crontab命令的权限:

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

脚本存放(我们还可以把脚本放在下面,让它每小时/天/星期/月执行一次):

  • /etc/cron.hourly
  • /etc/cron.daily
  • /etc/cron.weekly
  • /etc/cron.monthly

2.2 任务文件的格式

在crontab任务文件中,每一行代表一项任务。每行有六个字段,分别是:

minute    hour    day    month    week    command

* * * * * command 每1分钟执行一次command

3,15 * * * * command  每小时的第3和第15分钟执行
  • * :每分,每时,每日的意思
  • , :用逗号隔开,例如"2,5"表示第2和第5,不包括第4、第3
  • - :用中杠隔开,例如"2-5"表示"2,3,4,5"
  • / :表示间隔频率,例如 */2 ,是分为单位,则每2分钟执行一次
  • % :在crontab文件中表示换行,脚本或命令中则要%来转义

2.3 crontab 命令格式

$ crontab [选项] [参数]

	-e:直接编辑该用户的计时器设置
-l:列出该用户的计时器设置
-r:删除该用户的计时器设置
-u<用户名称>:指定要设定计时器的用户名称

2.4 示例

2.4.1 示例1

$ vim
# !/bin/sh echo "cron test" test.sh $ chmod +x test.sh $ crontab -e
* * * * * /root/test.sh # 每次执行会将控制台输出以邮件形式发送到对应的用户,用crontab -l可以查看有没有消息,具体内容在
$ cat /var/spool/mail/root

2.4.2 示例2

# 表示输入内容追加到log.txt中,而不是输出到屏幕
# 2表示错误输出也当成标准输出
* * * * * /root/test.sh >/dev/null 2>&1(默认是1,可以不写)
* * * * * /root/test.sh 1>/dev/null 2>&1
  • /dev/null:表示空设备,就是忽略其输出

  • 系统的3个默认I/O:

    • 0是标准输入(键盘)
    • 1是标准输出(屏幕),也是默认的
    • 2是标准错误
  • &:表示等同于,2>&1,表示2的输出重定向等同于1,如果在控制台调试,也就是屏幕上,方便调试

  • 1>/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息

  • 2>&1 表示错误输出等同于标准输出,标准输出已重定向到空设备,所以错误输出也重定向到空设备,不输出

At 、Crontabl定时任务的更多相关文章

  1. Linux定时任务调用sh文件

    1.编写sh文件 创建:vi test.sh 写入:date >> /xiaol/data.txt 2.默认创建的这个sh问件是没有执行权限的,修改权限 chmod 777 test.sh ...

  2. 180605-Linux下Crontab实现定时任务

    Linux下Crontab实现定时任务 基于Hexo搭建的个人博客,是一种静态博客页面,每次新增博文或者修改,都需要重新的编译并发布到Github,这样操作就有点蛋疼了,一个想法就自然而然的来了,能不 ...

  3. ubuntu 创建定时备份pg数据库定时任务

    ubuntu创建定时备份数据库定时任务 一.命令文件 创建db_back.sh #!/bin/bash echo "start backup" /usr/lib/postgresq ...

  4. Linux命令之Crontab定时任务,利用Crontab定时执行spark任务

    Linux命令之Crontab定时任务,利用Crontab定时执行spark任务 一.Linux命令之Crontab定时任务 1.1 常见Crontab任务 1.1.1 安装crontab 1.1.2 ...

  5. Java定时任务的常用实现

    Java的定时任务有以下几种常用的实现方式: 1)Timer 2)ScheduledThreadPoolExecutor 3)Spring中集成Cron Quartz 接下来依次介绍这几类具体实现的方 ...

  6. [转]Java实现定时任务的三种方法

    在应用里经常都有用到在后台跑定时任务的需求.举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据.文件等.在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 Tim ...

  7. 使用python crontab设置linux定时任务

    熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用 ...

  8. C#定时任务组件之FluentScheduler

    FluentScheduler是.NET开源处理定时任务组件 1.任务的创建注册 public static void TaskActionByMinutes(Action action, int c ...

  9. 浅谈 linux 例行性工作 crontab (linux定时任务)

    定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...

随机推荐

  1. xxl-job执行器的注册

    一.执行器注册流程 二.具体流程 1.注册监控线程 //类:JobRegistryHelper.java:方法:public void start() registryMonitorThread = ...

  2. 【题解】Luogu P2889 [USACO07NOV]挤奶的时间Milking Time

    Luogu P2889 [USACO07NOV]挤奶的时间Milking Time 题目描述 传送门Bessie is such a hard-working cow. In fact, she is ...

  3. Java知识复习(三)

    Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象.还是都不用. 在比较时先调用hashCode方法, ...

  4. VLAN的基础介绍与使用方法

    一.VLAN概述与优势 二.VLAN的种类 三.VLAN的范围 四.VLAN的三种接口模式 五.VLAN的实例操作 一.VLAN概述与优势 VLAN(虚拟局域网)通过为子网提供数据链路连接来抽象出局域 ...

  5. 关于安装运行MYSQL8.0简单使用及注意事项 On Docker Desktop & WSL2

    背景介绍 MYSQL是业界非常流行的一款关系型数据库系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL所使用的SQL语言是用于访问数据 ...

  6. 4、基本数据类型(init、bool)

    4.1.数字: 1.age = 21 weight = 64 fight = 5 2.数字的特点: (1)数字是不可变数据类型(不可以增加,删除,修改元素) (2)数字可以直接访问 (3)数字不可使用 ...

  7. php-高级计算器

    HTML代码: <!doctype html><html lang="en"><head> <meta charset="UTF ...

  8. androidstudio创建第一个so文件

    前言:之前看安卓软件安全与逆向分析这书,看到ndk开发这节,发现自己连so文件都没编译操作过233,所以就直接上手试试, 感觉挺好玩的,把关键的加密流程都放进so中去实现,这周先写个demo试试,感觉 ...

  9. 一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥(转)

    说到https,我们就不得不说tls/ssl,那说到tls/ssl,我们就不得不说证书机构(CA).证书.数字签名.私钥.公钥.对称加密.非对称加密.这些到底有什么用呢,正所谓存在即合理,这篇文章我就 ...

  10. 章节1-Grafana Dashboard的简单应用(2)

    目录 使用Grafana创建可视化Dashboard 1. Add data sources - Prometheus 2. 导入 Dashboard 模板 2.1 Node Exporter for ...