之前笔者是在本地写的博客,然后用 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. 【VBA】查找字符串

    老婆饼里有老婆吗 Sub test() aaa = "老婆饼里有老婆吗" If InStr(aaa, "老婆") <> 0 Then Debug.p ...

  2. Vue(1)Vue安装与使用

    前言 Vue(读音/vjuː/,类似于view) 是一套用于构建前后端分离的框架.刚开始是由国内优秀选手尤雨溪开发出来的,目前是全球"最"流行的前端框架.使用vue开发网页很简单, ...

  3. Java-Lambda相关使用介绍

    频繁使用的语句   Lambda又涉及到comparator和comparable区别(Comparable是实现comparable接口,实现后可以使用Collections.sort或Arrays ...

  4. 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件

    目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...

  5. match、vlookup、hlookup函数(结合index运用可以实现自动化填充)

    1.match返回查找值位置: match(lookup_value, lookup_array, match_type) Match(目标值,查找区域,0/1/-1) 使用注意:返回值是基于选择区域 ...

  6. DL基础补全计划(一)---线性回归及示例(Pytorch,平方损失)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  7. Docker 镜像针对不同语言的精简策略

    导航: 这里分为几个部分. 相关转载云原生:米开朗基杨 1.Docker减小镜像体积 2.Docker镜像针对不同语言的精简策略 对于刚接触容器的人来说,他们很容易被自己制作的 Docker 镜像体积 ...

  8. 深入理解 Android ANR 触发原理以及信息收集过程

    一.概述 作为 Android 开发者,相信大家都遇到过 ANR.那么为什么会出现 ANR 呢,ANR 之后系统都做了啥.文章将对这个问题详细解说. ANR(Application Not respo ...

  9. 乘风破浪,Windows11官方原装4K壁纸,前卫的艺术数字设计

    Windows11预览版官方壁纸 默认主题Windows Windows.zip 月轮主题ThemeA ThemeA.zip 艺术石主题ThemeB ThemeB.zip 日升主题ThemeC The ...

  10. SpringBoot 优雅整合Swagger Api 自动生成文档

    前言 一个好的可持续交付的项目,项目说明,和接口文档是必不可少的,swagger api 就可以帮我们很容易自动生成api 文档,不需要单独额外的去写,无侵入式,方便快捷大大减少前后端的沟通方便查找和 ...