Linux定时任务(1)— crontab

0.1682018.12.14 12:29:47字数 946阅读 921

执行定时任务
  • crontab 执行循环任务
  • at 执行一次性任务

crontab简介

Linux 系统有个 crond 程序,对应 cron 这个守护进程[ps -ef |grep cron]。它在系统中会每分钟扫描定时任务,读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行。

每个用户都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接创建或者直接修改。该crontab文件是通过crontab命令创建的

crontab -u username -e    #创建定时任务,

-u #后面跟创建此任务的用户名
-e #是进入编辑任务
-r #删除定时任务
-l #查看定时任务

1、crontab服务控制
service crond start    //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
2、查看 crontab 定时任务配置文件
  1. /var/spool/cron/
  • 这个目录下存放的是每个用户包括 root 的 crontab 任务;
  • 每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom;
  • 一般一个用户最多只有一个crontab文件。
  1. /etc/crontab
  • 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。
  • cat /etc/crontab查看内容如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/ # 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
内容说明
  • MAILTO=root 是说,当 /etc/crontab 这个档案中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给谁?由于 root 并无法再用户端收信,因此,通常都將这个 e-mail 改成自己的账号,好让我随时了解系统的状态!
  • “*”代表取值范围内的数字, “/”代表”每”, “-”代表从某个数字到某个数字, “,”分开几个离散的数字
    在 “分 时 天 月 周 命令“ 这些字段里,除了“命令”是每次都必须指定的字段以外,其它字段皆为可选,视需要决定。对于不指定的字段,要用“*”来填补其位置。 举例如下:
minute (0-59) hour (0-23) day (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
*/15(每15分钟) 6(每天6点) 10,20(每月10号及20号) 8(每年的8月) 0 (每个星期天)
每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
5 * * * * ls #指定每小时的第5分钟执行一次ls命令
30 5 * * * ls # 指定每天的 5:30 执行ls命令
30 7 8 * * ls #指定每月8号的7:30分执行ls命令
30 5 8 6 * ls #指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls # 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,
30 3 10,20 * * ls #每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls #每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls #每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令]
30 6 */10 * * ls # 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。
50 7 * * * root #每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件。
3、创建一个定期命令

第一种:crontab -u username -e 系统自动打开vi编辑器,输入需要执行的定时任务。如果出现如下提示:crontab: must be privileged to use -u ,请使用 sudo 执行。示例如下:

`* */2 * * * root rm /var/log/test/* `

第二种:用编辑文件的方式来创建定期命令,在/etc/cron.d/filename 下创建一个文件,vi 打开编辑文件的位置: /etc/cron.d/filename 。/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

4、查看任务、删除任务
crontab -l  #查看任务
crontab -u root -r #删除任务
5、定时任务创建权限的设定

方式:编辑文件

/etc/crond.deny   #编辑cron 创建定期任务的黑名单
/etc/crond.allow #编辑cron 创建定期任务的白名单

系统默认没有白名单,可以自己创建,注意,创建后,只有白名单上的用户才又权限创建任务。

6、创建cron脚本

第一步:写cron脚本文件,命名为crontest.cron,内容如下:

15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt

表示,每隔15分钟,执行打印一次命令
第二步:添加定时任务。执行命令 “crontab crontest.cron”,搞定 。
第三步:"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本
注意:这操作是直接替换该用户下的crontab,而不是新增

 
 

1人点赞

 
Linux

 
 
"小礼物走一走,来简书关注我"

赞赏支持还没有人赞赏,支持一下

枫林风雨iOS、java、Linux、Html5学习交流

简介


Linux crontab和Windows task schedules非常的相似。Crontab可以用来在系统中定期的执行任务。比如:写了一个爬虫需要每天早上八点执行,就可以用到Crontab;安装的Tomcat服务器需要每天凌晨重启一次,也可以使用到Crontab。总之,几乎所有的定时任务,我们都可以通过Crontab这个工具来完成。

安装


yum install cronie`

Crontab在Linux上的结构


 
crontab结构.png

从左到右依次为:

[分钟] [小时] [每月的某一天] [每年的某一月] [每周的某一天] [执行的命令]

注意:请留意每个选项的取值范围。

如何 添加/编辑 Crontab


  • 添加或更新crontab中的命令
crontab -e

默认情况下,系统会编辑当前登录用户的crontab命令集合。需要编辑其他用户的命令集合,需要使用到如下的命令

crontab -u username -e

查看Crontab命令集合


  • 查看当前系统登录用户的Crontab命令集合
crontab -l
  • 查看其他用户的Crontab命令集合
crontab -u username -l

20个超实用的Crontab使用实例


  1. 每天 02:00 执行任务
0 2 * * * /bin/sh backup.sh
  1. 每天 5:00和17:00执行任务
0 5,17 * * * /scripts/script.sh
  1. 每分钟执行一次任务

    通常情况下,我们并没有每分钟都需要执行的脚本(默默的想到了12306--)
  * * * * *  /scripts/script.sh
  1. 每周日 17:00 执行任务
0 17 * * sun  /scripts/script.sh
  1. 每 10min 执行一次任务
*/10 * * * * /scripts/monitor.sh
  1. 在特定的某几个月执行任务
  * * * jan,may,aug * /script/script.sh
  1. 在特定的某几天执行任务
0 17 * * sun,fri /script/scripy.sh

在每周五、周日的17点执行任务

  1. 在某个月的第一个周日执行任务
0 2 * * sun  [ $(date +%d) -le 07 ] && /script/script.sh
  1. 每四个小时执行一个任务
0 */4 * * * /scripts/script.sh
  1. 每周一、周日执行任务
0 4,17 * * sun,mon /scripts/script.sh
  1. 每个30秒执行一次任务

    我们没有办法直接通过上诉类似的例子去执行,因为最小的是1min。但是我们可以通过如下的方法。
  * * * * * /scripts/script.sh
* * * * * sleep 30; /scripts/script.sh
  1. 多个任务在一条命令中配置
  * * * * * /scripts/script.sh; /scripts/scrit2.sh
  1. 每年执行一次任务
@yearly /scripts/script.sh

@yearly 类似于“0 0 1 1 *”。它会在每年的第一分钟内执行,通常我们可以用这个发送新年的问候。

  1. 每月执行一次任务
@yearly /scripts/script.sh
  1. 每周执行一次任务
@yearly /scripts/script.sh
  1. 每天执行一次任务
@yearly /scripts/script.sh
  1. 每分钟执行一次任务
@yearly /scripts/script.sh
  1. 系统重启时执行
@reboot /scripts/script.sh
  1. 将 Cron 结果重定向的特定的账户

    默认情况下,cron 只会将结果详情发送给 cron 被制定的用户。如果需要发送给其他用户,可以通过如下的方式:
  # crontab -l
MAIL=bob
0 2 * * * /script/backup.sh
  1. 将所有的 cron 命令备份到文本文件当中

    这是一个当我们丢失了cron命令后方便快速的一个恢复方式。

    下面是利用这个方式恢复cron的一个小例子。(看看就行~)

    首先:检查当前的cron
# crontab -l
MAIL=rahul
0 2 * * * /script/backup.sh

然后:备份cron到文件中

# crontab -l > cron-backup.txt
# cat cron-backup.txt
MAIL=rahul
0 2 * * * /script/backup.sh

接着:移除当前的cron

# crontab -r
# crontab -l
no crontab for root

恢复:从text file中恢复

# crontab cron-backup.txt
# crontab -l
MAIL=rahul
0 2 * * * /script/backup.sh

原文链接


Crontab in Linux with 20 Useful Examples to Schedule Jobs

作者:LeeLom
链接:https://www.jianshu.com/p/d93e2b177814
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

crontab简单使用手册

2017.10.17 15:19:24字数 235阅读 386

-----------------------------------------------------------------

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=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

30 00 * * * root bash /root/code/Crawler/Crawler/SpiderTask.sh

38 14 16 * * root bash /root/code/UserLabel/UserLabelStart.sh

-----------------------------------------------------------------

 

如上所示为/etc/crontab文件中内容,公司服务器为centos。根据上图可知,前5个*为定时器执行时间配置,后面紧跟着执行用户名,后紧跟着要执行的命令。

配置完成后,可使用以下命令进行crond服务动作:

service crond start 启动服务

service crond stop 停止服务

service crond restart 重启服务

service crond reload 重新加载配置

执行命令时注意权限问题!!!

作者:匿名用户
链接:https://www.zhihu.com/question/30263869/answer/47400219
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

crontab 的 manpage 有言:

SYNOPSIS
crontab [-u user] file

是的,你只管把修改后的 crontab 文件变成 crontab 的参数就好了。
你只管 crontab -l 导出一个存文件,对着导出的那个干些事情,然后 crontab [文件名] 搞定。
你甚至连文件名都不需要,那玩意会读标准输入。

crontab_append()
{
(
crontab -l;
echo "$@";
) | crontab;
}
crontab_append @daily fuck fubuki
crontab_append @monthly buy dress --for-user=fubuki

以下是 ED 晚期患者的开小差。
捏个编辑器不就得了。

CONTENT="@hourly /usr/bin/evil" EDITOR="/usr/local/bin/croned" crontab -e

/usr/local/bin/croned:

#!/bin/bash
# silent vim in ex mode, + jumps to last line.
exec vim -e + -sc "a
$CONTENT
.
wq"

如果你学过 ed 也可以用 ed。去掉 -s 而只用 -c 可以看到 ex 的完整输出。
有可能应该用 VISUAL 变量。

请注意这里 CONTENT 不能包含单个句号。要在 ex 中输入单个句号,请使用

..
.
s/.//

的形式。
如果你懒,可以用

ts=$(date +%s)
echo "$CONTENT">/tmp/$ts
echo >/tmp/empty
exec vim -e + -sc "a
$(diff -e /tmp/empty /tmp/$ts | tail -c+1)
wq"

的方式请 diff 输出一个 ed 脚本喂给“魔改 ed”ex 模式的 Vim 帮你搞定。

如果你没有 ex 只有 ed(这时候你就不能用 vim 的参数 + 跳到最后了),你可以先 crontab -l 导出目前 crontab,复制一个文件补上内容,然后直接 crontab。这样的话你的脚本长这样:

crontab_append(){
local ts=$(date +%s)
crontab -l >/tmp/$ts
( cat /tmp/$ts; echo "$@" ) >/tmp/$ts_
diff -e /tmp/$ts{,_} VISUAL=ed crontab -e
}
crontab_append @hourly /usr/bin/evil

所以说啊,要成为熟练的 Eunuchs Hacker,你先得 ED。

crontab简单使用手册的更多相关文章

  1. moloch1.8.0简单操作手册

    moloch1.8.0简单操作手册 Sessions 页面:Sessions主要通过非常简单的查询语言来构建表达式追溯数据流量,以便分析. SPIView 页面: SPIGraph页面:SPIGrap ...

  2. EasyX库简单中文手册

    EasyX库简单中文手册 作者: 时间: 2021/2/2 第一个例程 #include <graphics.h> // 图像相关库 #include <conio.h> // ...

  3. typora简单使用手册

    typora简单使用手册讲解`` 下载网站 网址:https://typoraio.cn/ 苹果电脑:https://typora.en.softonic.com/ 正版呢当然是收费 破解版自行百度 ...

  4. MongoVUE简单操作手册

    本文转自网络,对疑问的地方做了修改 官方参考文献:http://www.mongovue.com/tutorials/ MongoVUE 是个比较好用的MongoDB客户端,需要注册,但是可以变成永久 ...

  5. linux 计划任务 crontab 简单用法

    添加计划任务: 方法1: crontab -e 方法2: vim /etc/crontab #这种方式进去的文件有个sample可供参考 查看已经启动的任务:crontab -l 查看运行状态:ser ...

  6. SVN - 简单使用手册

    背景 由于项目需要,新增了两名程序员来一起支持一个分支的开发工作,因此需要在原来的SVN中制作分支并且为new commer  分配用户以及权限. 0. 准备 在Window系统上使用SVN,我们最好 ...

  7. jmeter+nmon+crontab简单的执行接口定时压测

    一.概述 临时接到任务要对系统的接口进行压测,上面的要求就是:压测,并发2000 在不熟悉系统的情况下,按目前的需求,需要做的步骤: 需要有接口脚本 需要能监控系统性能 需要能定时执行脚本 二.观察 ...

  8. Kotlin 简单使用手册

    在昨天和做android的前辈一番交谈后,觉得很惭愧,许多东西还只是知其然而不知其所以然,也深感自己的技术还太浅薄.以后要更加努力地学习,要着重学习原理.方法论,不能只停留在会用的阶段. 今天又要献丑 ...

  9. Crontab 简单实现树莓派语音闹钟

    树莓派实验室按:这是来自 hyhmnn 的投稿.是时候关掉你的手机闹铃了,用树莓派外接一个音箱就可以 Make 一款科技感和实用性兼备的"AI 闹钟".这里用到了 Linux 的计 ...

随机推荐

  1. AutoAssign源码分析

    目录 AutoAssign源码分析 一. 简介 二. 论文理论 2.1 联合表示 2.2 正样本权重 2.3 负样本权重 2.4 总的loss 2.5 补充loss 三. 论文代码 四. 总结 五. ...

  2. Windows系统搭建ELK日志收集服务器

    一.ELK是什么?ELK是由Elasticsearch.Logstash.Kibana这3个软件的首字母缩写. Elasticsearch是一个分布式搜索分析引擎,稳定.可水平扩展.易于管理是它的主要 ...

  3. 告别DNS劫持,一文读懂DoH

    如果评选一个差评服务器榜单,除去育碧高居榜首外,一定也少不了 Nintendo Switch 让人头秃的联网服务.尽管任天堂已经架设了香港 CDN 服务器用于加速,但是更新安装的速度也没有什么大幅改变 ...

  4. Docker下MySQL的安装

    1 概述 本文讲述了如何利用Docker去安装MySQL,以及MySQL自定义配置文件的相关设置. 2 安装Docker 首先安装Docker并开启服务: systemctl start docker ...

  5. Linux入门之基本的概念、安装和操作

    目录 Linux基本概念 Linux的安装 虚拟机安装CentOS7 CentOS设置网络 Linux基本操作命令 文件目录操作命令 进程操作命令 文本操作命令 Linux权限操作 用户和组操作命令 ...

  6. Java编程语言学习01-编写第1个Java程序

    JVM/JRE/JDK JVMJava虚拟机(Java Virtual Machine)它是运行所有Java程序的虚拟计算机有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上 ...

  7. IdentityServer4+OAuth2.0+OpenId Connect 详解

    一  Oauth 2.0 1 定义 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. ...

  8. 1035 Password

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  9. 展开说说,Spring Bean IOC、AOP 循环依赖

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 延迟满足能给你带来什么? 大学有四年时间,但几乎所有人都是临近毕业才发现找一份好工作 ...

  10. 微信小程序中的自定义组件

    微信小程序中的组件 前言 之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,当时官方对这方面的文档也只是寥寥几句,一笔带过而已,所以写起来真的是非常非常痛苦!! 好在微信小程序的库从 ...