博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】Linux crontab定时任务配置方法(详解)
阅读量:5329 次
发布时间:2019-06-14

本文共 7025 字,大约阅读时间需要 23 分钟。

CRONTAB概念/介绍

crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。

1: crontab文件一般位于/etc/下,这里面存放系统运行的的调度程序。

[root@localhost cron]# more /etc/crontab

SHELL=/bin/bash

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

MAILTO=root

HOME=/

# run-parts

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

2:每个用户都会生成一个自动生成一个自己的crontab文件,一般位于/var/spool/cron目录下

[root@localhost cron]# cd /var/spool/cron

[root@localhost cron]# ls

oracle root

如果你用命令crontab -r 就会删除当前用户的crontab文件,例如你切换到oracle账号下,执行了该命令,那么/var/spool/cron/oracle文件就会删除,如果要创建该文件只需要用crontab -e命令即可。注意,普通用户一般没有权限访问/var/spool/cron

3:cron.deny 与 cron.allow文件

/etc/cron.deny 表示不能使用crontab 命令的用户

/etc/cron.allow 表示能使用crontab的用户。

默认情况下,cron.allow文件不存在。如果两个文件同时存在,那么/etc/cron.allow 优先。如果两个文件都不存在,那么只有超级用户可以安排作业。

但是让人纳闷的是cron.deny文件是空的,如下所示

[oracle@localhost etc]$ more cron.deny

4:cron.hourly,cron.daily,cron.monthly,cron.weekly

[oracle@localhost etc]$ ls -lrt cron*

-rw-r--r-- 1 root root 255 Sep 21 2004 crontab

-rw-r--r-- 1 root root 0 May 16 2008 cron.deny

cron.hourly:

total 0

cron.monthly:

total 8

-rwxr-xr-x 1 root root 278 Sep 29 2004 0anacron

cron.weekly:

total 16

-rwxr-xr-x 1 root root 277 Sep 29 2004 0anacron

-rwxr-xr-x 1 root root 414 Jun 6 2007 00-makewhatis.cron

cron.daily:

total 60

-rwxr-xr-x 1 root root 286 Aug 14 2004 tmpwatch

-rwxr-xr-x 1 root root 276 Sep 29 2004 0anacron

-rwxr-xr-x 1 root root 2133 Dec 1 2004 prelink

-rwxr-xr-x 1 root root 180 May 2 2006 logrotate

-rwxr-xr-x 1 root root 418 Jun 6 2007 00-makewhatis.cron

-rwxr-xr-x 1 root root 104 Aug 2 2007 rpm

-rwxr-xr-x 1 root root 121 Aug 22 2007 slocate.cron

lrwxrwxrwx 1 root root 28 May 16 2008 00-logwatch -> ../log.d/scripts/logwatch.pl

cron.d:

total 12

-rw------- 1 root root 366 Jun 12 2007 sa-update

-rw-r--r-- 1 root root 188 Jul 18 2007 sysstat

CRONTAB在线手册

注意:不同版本的Linux系统,可能crontab手册内容有所出入,请以实际版本为准。

[oracle@localhost ~]$ man crontab | more

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
CRONTAB(1)                             CRONTAB(1)
 
 
 
NAME
    
crontab - maintain crontab files for individual users (ISC Cron V4.1)
 
SYNOPSIS
    
crontab [-u user] file
    
crontab [-u user] [-l | -r | -e] [-i] [-s]
 
DESCRIPTION
    
Crontab is the program used to install, deinstall or list the tables
    
used to drive the cron(8) daemon in ISC Cron. Each user can have their
    
own crontab, and though these are files in /var/spool/ , they are not
    
intended to be edited directly. For SELinux in mls mode can be even
    
more crontabs - for each range. For more see selinux(8).
 
    
If the cron.allow file exists, then you must be listed therein in order
    
to be allowed to use this command. If the cron.allow file does not
    
exist but the cron.deny file does exist, then you must not be listed in
    
the cron.deny file in order to use this command. If neither of these
    
files exists, only the super user will be allowed to use this command.
 
 
OPTIONS
    
-u   It specifies the name of the user whose crontab is to be
       
tweaked.  If this option is not given, crontab examines "your"
       
crontab, i.e., the crontab of the person executing the command.
       
Note that su(8) can confuse crontab and that if you are running
       
inside of su(8) you should always use the -u option for safety's
       
sake.  The first form of this command is used to install a new
       
crontab from some named file or standard input if the pseudo-
       
filename "-" is given.
 
    
-l   The current crontab will be displayed on standard output.
 
    
-r   The current crontab will be removed.
 
    
-e   This option is used to edit the current crontab using the editor
       
specified by the VISUAL or EDITOR environment variables.  After
       
you exit from the editor, the modified crontab will be installed
       
automatically.
 
    
-i   This option modifies the -r option to prompt the user for a
       
'y/Y' response before actually removing the crontab.
 
    
-s   It will append the current SELinux security context string as an
       
MLS_LEVEL setting to the crontab file before editing / replace-
       
ment occurs - see the documentation of MLS_LEVEL in crontab(5).
 
SEE ALSO
    
crontab(5), cron(8)
 
FILES
    
/etc/cron.allow
    
/etc/cron.deny
 
STANDARDS
    
The crontab command conforms to IEEE Std1003.2-1992 (‘‘POSIX'').  This
    
new command syntax differs from previous versions of Vixie Cron, as
    
well as from the classic SVR3 syntax.
 
DIAGNOSTICS
    
A fairly informative usage message appears if you run it with a bad
    
command line.
 
AUTHOR
    
Paul Vixie <
vixie
@isc.org>
 
 
 
4th Berkeley Distribution    16 Januar 2007           CRONTAB(1)

CRONTAB语法及应用

1:查看当前用户的定时任务

[oracle@localhost ~]$ crontab -l

* * * * * /home/oracle/test.sh >/dev/null 2>&1

2:编辑当前用户的定时任务

可以在编辑状态修改、删除、新增一些定时任务。注释一般用#

[oracle@localhost ~]$ crontab -e

3:删除当前用户的定时任务

[root@localhost ~]# crontab -r

[root@localhost ~]# crontab -l

no crontab for root

4:

如下所示,一般crontab文件里面的定时任务格式如下所示:

59 23 * * * /home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1

crontab 文件中每个条目中各个域的意义和格式:

第一列 分钟: 1——59

第二列 小时: 1——23(0表示子夜)

第三列 日 : 1——31

第四列 月 : 1——12

第五列 星期: 星期0——6(0表示星期天,1表示星期一、以此类推)

第六列 要运行的命令

我们暂且用C1、C2、C3、C4、C5、C6代表这六列,前面五列通过组合方式来决定执行脚本的频率,最小频率为每分钟执行一次,其中Cn可以用 * ; */n ; T1-T2; a,b,c; 四种形式来表示:

当 C1 为 * 时表示每分钟都要执行脚本,C2 为 * 时表示每小时都要执行程式,依次类推.....

当 C1 为 T1-T2 时表示从第 T1 分钟到第 T2 分钟这段时间内要执行,C2 为 T1-T2 时表示从第 T1 到第 T2 小时都要执行,依次类推....

当 C1 为 */n 时表示每 n 分钟的时间间隔执行一次,C2 为 */n 表示每隔n小时的间隔执行一次,依次类推.....

当 C1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,C2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,依次类推....

下面列举几个例子供大家参考

1: 59 23 * * * /home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1

表示每天23点59分执行脚本/home/oracle/scripts/alert_log_archive.sh

2: */5 * * * * /home/oracle/scripts/monitoring_alert_log.sh >/dev/null 2>&1

表示每5分钟执行一次脚本/home/oracle/scripts/monitoring_alert_log.sh

3: 0 20 * * 1-5 mail -s "**********" kerry@domain.name < /tmp/maildata

周一到周五每天下午 20:00 寄一封信给 kerry@domain.name

..............................................

关于 >/dev/null 2>&1 的解释:

0表示键盘输入

1表示标准输出

2表示错误输出.

我们首先创建test.sh脚本如下:

#! /bin/sh

echo "hello, everybody, now is " `date`

date >> test.txt

然后添加作业

* * * * * /home/oracle/test.sh >/home/oracle/log.txt & 默认值为1,即和下面命令一致

* * * * * /home/oracle/test.sh 1>/home/oracle/log.txt &

* * * * * /home/oracle/test.sh 2>/home/oracle/log.txt &

* * * * * /home/oracle/test.sh 2>/home/oracle/log.txt 2>&1 &

1,2将tesh.sh 命令输出重定向到log.txt, 即输出内容不打印到屏幕上,而是输出到log.txt文件中。如果你需要追加而不是覆盖,可以用 >>代替>

2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件log.txt。

&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。

注意事项:

配置定时任务时,需要注意两个问题:

1: 在SHELL中设置了必要的环境变量;例如一个shell脚本手工执行OK,但是配置成后台作业执行时,获取不到ORACLE的环境变量,这是因为crontab环境变量问题,Crontab的环境默认情况下并不包含系统中当前用户的环境。所以,你需要在shell脚本中添加必要的环境变量的设置

2: 尽量所有的文件都采用完全路径方式,避免使用相对路径。

以上这篇Linux crontab定时任务配置方法(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

转载于:https://www.cnblogs.com/yanglang/p/7575129.html

你可能感兴趣的文章
SGDMA
查看>>
20145235李涛《网络对抗》Exp8 Web基础
查看>>
Git-SSH
查看>>
使用JavaMail发送邮件-从FTP读取图片并添加到邮件正文发送
查看>>
检测目标程序ELF bit是32还是64
查看>>
struts2基本介绍
查看>>
Duanxx的STM32学习:NVIC操作
查看>>
假设拦截WebView的错误和OS升级到4.4后链接不能点击的问题
查看>>
c++中sort()及qsort()的使用方法总结
查看>>
Javascript > Eclipse > 自动代码规范化
查看>>
站立会议6
查看>>
我的笔记
查看>>
学生成绩
查看>>
16. 3Sum Closest
查看>>
使用Objective-C的+(void)initialize初始化static变量
查看>>
会员分享几个平时看榜单常去的网站
查看>>
用 new 还是用 alloc/init
查看>>
php中url传递中文字符,特殊危险字符的解决方法
查看>>
linux服务器之LVS、Nginx和HAProxy负载均衡器对比
查看>>
with语句
查看>>