在Linux伺服器部署定時任務,常要用到Crontab,主要用於網站定時指令碼的執行,系統維護、備份的定時任務等,本文介紹Crontab部署任務的方式和命令
Linux系統使用Crontab跑計劃任務,也就是定時任務,基本的文法格式是:
2 */1 * * * /data/vhosts/example/cronjob/_run_1_hour.sh
而sh指令檔就是具體的執行檔案,如用PHP運行一個或多個指令碼:
Shell
#!/bin/sh
cd /data/vhosts/web/cronjob
RUNPATH=/data/vhosts/web/cronjob
PHPEXEC=/usr/local/php-fcgi/bin/php
# 每小時運行一次此指令碼
$PHPEXEC $RUNPATH/test_crontab.php
#!/bin/sh
cd /data/vhosts/web/cronjob
RUNPATH=/data/vhosts/web/cronjob
PHPEXEC=/usr/local/php-fcgi/bin/php
# 每小時運行一次此指令碼
$PHPEXEC $RUNPATH/test_crontab.php
Crontab命令的格式說明如下:
Crontab
minute: 表示分鐘,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。
command:要執行的命令,可以是系統命令,也可以是自己編寫的指令檔。
幾個有用的Crontab命令
crontab -l,列出所有的計劃任務。
crontab -e,編輯計劃任務,可通過此命令添加計劃任務。
如,每分鐘執行一次:
0 */1 * * * /data/vhosts/web/cronjob/_run_1_hour.sh >> /data/vhosts/web/log/_run_1_hour_stop_tips.log
這樣寫還可以記錄指令碼輸入的內容到記錄檔。如果你需要追加而不是覆蓋,可以用 >>代替>
/etc/crontab、/etc/cron.deny 、 /etc/cron.allow檔案介紹
系統調度的任務一般存放在/etc/crontab這個檔案下,裡面存放了一些系統啟動並執行發送器,通過命令我們可以看一下裡面的內容:
[root@xiaoluo ~]# 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
這些任務都會是系統在運行起來後自動進行調度的。同時在/etc目錄下還存放了/etc/cron.deny 和 /etc/cron.allow 檔案
/etc/cron.deny 表示不能使用crontab 命令的使用者
/etc/cron.allow 表示能使用crontab的使用者。
如果兩個檔案同時存在,那麼/etc/cron.allow 優先。
如果兩個檔案都不存在,那麼只有root使用者可以安排作業。