【Python】Linux crontab定時任務配置方法(詳解)

CRONTAB概念/介紹html

crontab命令用於設置週期性被執行的指令。該命令從標準輸入設備讀取指令,並將其存放於「crontab」文件中,以供以後讀取和執行。linux

cron 系統調度進程。 可使用它在天天的非高峯負荷時間段運行做業,或在一週或一月中的不一樣時段運行。cron是系統主要的調度進程,能夠在無需人工干預的狀況下運行做業。crontab命令容許用戶提交、編輯或刪除相應的做業。每個用戶均可以有一個crontab文件來保存調度信息。系統管理員能夠經過cron.deny 和 cron.allow 這兩個文件來禁止或容許用戶擁有本身的crontab文件。shell

1: crontab文件通常位於/etc/下,這裏面存放系統運行的的調度程序。bash

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

SHELL=/bin/bashapp

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

MAILTO=rootide

HOME=/this

# run-partsurl

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表示星期1、以此類推)

第六列 要運行的命令

咱們暫且用C一、C二、C三、C四、C五、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定時任務配置方法(詳解)就是小編分享給你們的所有內容了,但願能給你們一個參考,也但願你們多多支持腳本之家。

相關文章
相關標籤/搜索