Centos下执行定时任务Crontab命令介绍

1.Cron的启动与关闭

由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务:

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

2.Cron配置文件

2.1全局配置文件

crontab在/etc目录下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五个目录和crontab,cron.deny二个文件.

cron.daily是每天执行一次的job,cron.weekly是每个星期执行一次的job.cron.monthly是每月执行一次的job,cron.hourly是每个小时执行一次的job.cron.d是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来执行的,那么就放在这个目录下面.

/etc/crontab文件一般如下:

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

我们可在此文件中添加自己需要的cron job.

/etc/cron.deny文件就是用于控制不让哪些用户使用Crontab的功能.

2.2用户配置文件

每个用户都有自己的cron配置文件,通过crontab -e
就可以编辑,一般情况下我们编辑好用户的cron配置文件保存退出后,系统会自动就存放于/var/spool/cron/目录中,文件以用户名命名.

linux的cron服务是每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的内容.

3.Cron命令格式

crontab [ -u user ] 文件
crontab [ -u user ] { -l | -r | -e }

-u:指定某一用户

-e:执行文字编辑器来设定用户(当前用户或指定用户)时程表,内定的文字编辑器是vi.
-r:删除用户时程表.
-l:列出用户时程表.

金沙国际官网,4.Cron文件格式

* * * * * command
分 时 日 月 周  命令

第1列表示分钟1~59, 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

5.Cron文件使用说明

5.1 一般情况

当f1 为 * 时表示每分钟都要执行 program,f2 为 *
时表示每小时都要执行程序,其余类推.

* * * * * /bin/usershell 每天每分钟执行一次/bin/usershell
当f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b
时表示从第 a 到第 b 小时都要执行,其余类推.

0-12 * * * * /bin/usershell
每天每小时从0到12分钟每分钟执行一次/bin/usershell
当f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n
小时个时间间隔执行一次,其余类推.

* */2 * * * /bin/usershell 每天每2小时执行一次/bin/usershell
当f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,…
时表示第 a, b, c…个小时要执行,其余类推.

* 1,3,5,7 * * * /bin/usershell
每天每逢1,3,4,7点执行一次/bin/usershell

5.2. 冲突逻辑

日期可以用月限定,也可以用“星期”指定,如果两个段有冲突,那么,第六段的命令将在匹配任何一个的情况下都运行,比如

“30 4 1,15 * 5”,将在每月的1号和15号加每个周五,上午4:30运行.

5.3. 符号”%”

“%”在Cron文件中,有”结束命令行”,”换行”,”重定向”的作用,假如不需要”%”的特殊作用,需要使用转义符转义.

5.4. @reboot

这个不需要理解,为了达到在开机后运行,且只运行一次的目的.除了这个,也无法通过前五段的设置来实现.

@annually也是这个功能.

至于@yearly,@monthly等等其实都可以用上面的五段来设置.

然后我自己写了一个小例子做了下测试:

使用crontab -e进行编辑,内容为:

*/2 * * * * echo “i am crontab” >> /home/zhang/hello

这样隔两分钟就会往hello这个文件里写i am crontab

我自己写了一个脚本task.sh,直接运行task.sh时可以运行,可是加到crontab里就有运行了,后来我查看了网上的解决方法,终于解决了,先来看一下我原来写的task.sh脚本吧:

#!/bin/sh

java -jar offergateway.biz.offer-1.0-SNAPSHOT.jar

crontab定时任务的写法为:

* * * * * /task.sh

后来我查了网上说要运行crontab,必须使用绝对路径,然后我把路径都改成绝对路径了。

在crontab的执行环境变量中,没有相应用户设置的环境变量,你需要手动设置一下环境变量,才能让它生效。于是我把上面的脚本改成:

#!/bin/sh

. /etc/profile

java -jar /home/zhang/offergateway.biz.offer-1.0-SNAPSHOT.jar

crontab也改成绝对路径:

* * * * * sh /home/zhang/task.sh

哈哈,成功了happy

原文出自:

1.Cron的启动与关闭
由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务:
/sbin/service crond s…

Crontab定时执行任务,Crontab执行任务

最近接触到定时执行程序的需求,所以学习了解了一下crontab。本文首先介绍crontab的语法知识,然后做一个demo。

一、crontab语法

1.crontab基本格式

 {minute} {hour} {day-of-month} {month} {day-of-week}
{full-path-to-shell-script}

2.crontab语法示例

 1 #在 12:01a.m运行
 2 1 0 * * * /root/bin/backup.sh 
 3 #每个工作日11:59p.m运行
 4 59 11 * * 1,2,3,4,5 /root/bin/backup.sh 
 5 59 11 * * 1-5 /root/bin/backup.sh 
 6 #每5分钟运行一次命令 
 7 */5 * * * * /root/bin/check-status.sh 
 8 #每个月的第一天1:10p.m运行 
 9 10 13 1 * * /root/bin/full-backup.sh 
10 #每个工作日11p.m运行
11 0 23 * * 1-5 /root/bin/incremental-backup.sh

二、crontab实例

1.crontab的启动和停止

1 service crond start/stop/restart

2.crontab -e方式添加crontab任务

1 crontab -e   #添加任务
2 crontab -l   #查看所有任务    
3 crontab -r   #删除任务

准备工作:

vim /home/helloworld/helloworld.py

vim /home/helloworld/helloworld.sh

1 #helloworld.py
2 import time
3 with open('test.txt','w+') as f:
4     f.write(str(time.time()))
5 
6 
7 #helloworld.sh
8 cd /home/helloworld/
9 python /home/helloworld/helloworld.py

 

step1:执行crontab -e命令之后进入编辑模式,添加要执行的任务。

*/1 * * * * bash /home/helloworld/helloworld.sh

step2:启动crontab服务

step3:查看crontab日志

 1 tail -f  /var/log/cron
 2 #查看log文件
 3 May 12 19:11:01 localhost CROND[12824]: (root) CMD (bash /home/helloworld/helloworld.sh)
 4 May 12 19:11:01 localhost CROND[12823]: (root) MAIL (mailed 14 bytes of output but got status 0x007f#012)
 5 May 12 19:12:01 localhost CROND[12865]: (root) CMD (bash /home/helloworld/helloworld.sh)
 6 May 12 19:12:01 localhost CROND[12864]: (root) MAIL (mailed 14 bytes of output but got status 0x007f#012)
 7 May 12 19:13:01 localhost CROND[12880]: (root) CMD (bash /home/helloworld/helloworld.sh)
 8 May 12 19:13:01 localhost CROND[12879]: (root) MAIL (mailed 14 bytes of output but got status 0x007f#012)
 9 May 12 19:14:01 localhost CROND[12895]: (root) CMD (bash /home/helloworld/helloworld.sh)
10 May 12 19:14:01 localhost CROND[12894]: (root) MAIL (mailed 13 bytes of output but got status 0x007f#012)
11 
12 #同时查看helloworld文件夹
13 ll -t
14 #监测到
15 [[email protected] helloworld]# ll -t
16 总用量 12
17 -rw-r--r-- 1 root root 13 5月  12 19:11 test.txt
18 -rw-r--r-- 1 root root 59 5月  12 16:45 helloworld.sh
19 -rw-r--r-- 1 root root 94 5月  12 16:41 helloworld.py
20 [[email protected] helloworld]# ll -t
21 总用量 12
22 -rw-r--r-- 1 root root 13 5月  12 19:12 test.txt
23 -rw-r--r-- 1 root root 59 5月  12 16:45 helloworld.sh
24 -rw-r--r-- 1 root root 94 5月  12 16:41 helloworld.py
25 [[email protected] helloworld]# ll -t
26 总用量 12
27 -rw-r--r-- 1 root root 13 5月  12 19:13 test.txt
28 -rw-r--r-- 1 root root 59 5月  12 16:45 helloworld.sh
29 -rw-r--r-- 1 root root 94 5月  12 16:41 helloworld.py
30 [[email protected] helloworld]# ll -t
31 总用量 12
32 -rw-r--r-- 1 root root 12 5月  12 19:14 test.txt
33 -rw-r--r-- 1 root root 59 5月  12 16:45 helloworld.sh
34 -rw-r--r-- 1 root root 94 5月  12 16:41 helloworld.py
35 [[email protected] helloworld]# 

3.通过vim /etc/crontab方式添加任务

 1 #查看/etc/crontab
 2 vim /etc/crontab
 3 
 4 #添加任务
 5 SHELL=/bin/bash
 6 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 7 MAILTO=""
 8 HOME=/
 9 
10 # For details see man 4 crontabs 
11 # Example of job definition:
12 # .---------------- minute (0 - 59)
13 # |  .------------- hour (0 - 23)
14 # |  |  .---------- day of month (1 - 31)
15 # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
16 # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,w    ed,thu,fri,sat
17 # |  |  |  |  |
18 # *  *  *  *  * user-name command to be executed
19 */1 * * * * root bash /home/helloworld/helloworld.sh                   

4.可以通过同样的方式监测到任务在重复执行

 

最近接触到定时执行程序的需求,所以学习了解了一下crontab。本文首先介绍crontab的语法知识,然后做…

金沙国际官网 1

简介


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

转载自:

      进入crontab所在路径         

安装


yum install cronie`

Crontab在Linux上的结构

金沙国际官网 2

从左到右依次为:
[分钟] [小时] [每月的某一天] [每年的某一月] [每周的某一天]
[执行的命令]
注意:请留意每个选项的取值范围。

添加或更新crontab中的命令

crontab -e

查看当前系统登录用户的Crontab命令集合

crontab -l

金沙国际官网 3

Crontab在Linux上的结构


金沙国际官网 4

crontab结构.png

从左到右依次为:
[分钟] [小时] [每月的某一天] [每年的某一月] [每周的某一天]
[执行的命令]
注意:请留意每个选项的取值范围。

20个超实用的Crontab使用实例

每天 02:00 执行任务
0 2 * * * /bin/sh backup.sh
每天 5:00和17:00执行任务
0 5,17 * * * /scripts/script.sh
每分钟执行一次任务
通常情况下,我们并没有每分钟都需要执行的脚本(默默的想到了12306--)
* * * * *  /scripts/script.sh
每周日 17:00 执行任务
0 17 * * sun  /scripts/script.sh
每 10min 执行一次任务
*/10 * * * * /scripts/monitor.sh
在特定的某几个月执行任务
* * * jan,may,aug * /script/script.sh
在特定的某几天执行任务
0 17 * * sun,fri /script/scripy.sh
在每周五、周日的17点执行任务
在某个月的第一个周日执行任务
0 2 * * sun  [ $(date +%d) -le 07 ] && /script/script.sh
每四个小时执行一个任务
0 */4 * * * /scripts/script.sh
每周一、周日执行任务
0 4,17 * * sun,mon /scripts/script.sh
每个30秒执行一次任务
我们没有办法直接通过上诉类似的例子去执行,因为最小的是1min。但是我们可以通过如下的方法。
* * * * * /scripts/script.sh
* * * * *  sleep 30; /scripts/script.sh
多个任务在一条命令中配置
* * * * * /scripts/script.sh; /scripts/scrit2.sh
每年执行一次任务
@yearly /scripts/script.sh
@yearly 类似于“0 0 1 1 *”。它会在每年的第一分钟内执行,通常我们可以用这个发送新年的问候。
每月执行一次任务
@yearly /scripts/script.sh
每周执行一次任务
@yearly /scripts/script.sh
每天执行一次任务
@yearly /scripts/script.sh
每分钟执行一次任务
@yearly /scripts/script.sh
系统重启时执行
@reboot /scripts/script.sh
将 Cron 结果重定向的特定的账户
默认情况下,cron 只会将结果详情发送给 cron 被制定的用户。如果需要发送给其他用户,可以通过如下的方式:
# crontab -l
MAIL=bob
0 2 * * * /script/backup.sh
将所有的 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

  

 

设置每2分钟自动执行任务

如何 添加/编辑 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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图