之前笔者是在本地写的博客,然后用 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. 【NX二次开发】获得屏幕矩阵并设置WCS为屏幕方向

    说明:获得屏幕矩阵并设置WCS为屏幕方向(Z朝向自己,X轴朝右,Y轴超上). 方法: 1 extern DllExport void ufusr(char *param, int *retcode, ...

  2. 从JDBC到ORM的事务实现

    一.JDBC 早期SUN公司想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了.后来SUN开始与数据库厂商们讨论,最终得出的结 ...

  3. 你有一份经典SQL语句大全,请注意查收

    一.基础部分 1.创建数据库 CREATE DATABASE dbname 2.删除数据库 DROP DATABASE dbname 3.创建新表 CREATE TABLE tabname(col1 ...

  4. 孟老板 Paging3 (一) 入门

    BaseAdapter系列 ListAdapter系列 Paging3 (一) 入门 Paging3 (二) 结合 Room Paging3 (一)  入门 前言: 官方分页工具,  确实香.   但 ...

  5. 前台使用Vue

    前台搭建遇到问题 ----前台访问量大 未采用vue 单页面SAP 的方式构建 使用多HTML构建页面 项目构建 vue 2.6 https://cn.vuejs.org/ elementUI htt ...

  6. DOS命令行(7)——Windows网络检测与诊断

    ping ping 命令的作用是通过发送"网际控制报文协议(ICMP)"回响请求消息来验证另一台TCP/IP计算机的IP级连接状态,回响应答消息的接收情况将和返回过程的次数一起显示 ...

  7. 关于Mysql事务,你必须知道的几个知识点!

    Transaction事务 上期我们讲到了jpa的常用操作,查询.更新.删除等,但是如果在操作数据库事务时发生异常,数据会回滚吗?下面我们来看个例子 UserController新增如下代码: @Ge ...

  8. 一个排序引发的BUG

    你好呀,我是why. 前两天在 Git 上闲逛的时候又不知不觉逛到 Dubbo 那里去了. 看了一下最近一个月的数据,社区活跃度还是很高的: 然后看了一下最新的 issue,大家提问都很积极. 其中看 ...

  9. Golang修改操作系统时间

    Golang修改操作系统时间 需求 程序有时需要和服务器对时,发现延迟过高修改本地时间,这段代码网上抄的,实测可用,windows环境需要以管理员身份启动命令提示符调试 实现Demo package ...

  10. Windows批处理文件编写宝典

    原贴:批处理新手入门导读 现在的教程五花八门,又多又杂.如何阅读,从哪里阅读,这些问题对新手来说,都比较茫然. 这篇文章的目的就是帮助新手理清学习顺序,快速入门.进步 1.如果你从来没有接触甚至没有听 ...