cron設定定時任務詳解

2021-10-05 10:51:45 字數 4387 閱讀 8291

定時任務cron job被用於安排那些需要被週期性執行的命令。利用它,你可以配置某些命令或者指令碼,讓它們在某個設定的時間內周期性地執行。cron 是 linux 或者類 unix 系統中最為實用的工具之一。cron 服務(守護程序)在系統後台執行,並且會持續地檢查/etc/crontab檔案和/etc/cron.*/目錄。它同樣也會檢查/var/spool/cron/目錄。

在linux平台上如果需要實現任務排程功能可以編寫cron指令碼來實現。

以某一頻率執行任務

linux缺省會啟動crond程序,crond程序不需要使用者啟動、關閉。

crond程序負責讀取排程任務並執行,使用者只需要將相應的排程指令碼寫入cron的排程配置檔案中。

cron的排程檔案有以下幾個:

crontab

cron.d

cron.daily

cron.hourly

cron.monthly

cron.weekly

如果用的任務不是以hourly monthly weekly方式執行,則可以將相應的crontab寫入到crontab 或cron.d目錄中。

# 安裝crontab:

$ yum install crontabs

# 啟動服務

$ systemctl start crond.service

# 關閉服務

$ systemctl stop crond.service

# 重啟服務

$ systemctl restart crond.service

# 重新載入配置

$ systemctl reload crond.service

# 檢視crontab服務狀態:

$ systemctl status crond.service

# 加入開機自動啟動:

$ systemctl enable crond.service

crontab 選項

以下是 crontab 的有效選項:

$ crontab -r     #刪除 crontab 檔案。

$ crontab -ir #刪除 crontab 檔案前提醒使用者。

$ crontab

file

[-u user]

#用指定的檔案替代目前的crontab。

$ crontab -[-u user]

#用標準輸入替代目前的crontab.

$ crontab -1[user]

#列出使用者目前的crontab.

$ crontab -e[user]

#編輯使用者目前的crontab,如果檔案不存在會自動建立.

$ crontab -d[user]

#刪除使用者目前的crontab.

$ crontab -c dir

#指定crontab的目錄。

$  cat /etc/crontab

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

前四行是用來配置crond任務執行的環境變數:

格式:

minute   hour   day   month   week   command
其中:

在以上各個欄位中,還可以使用以下特殊字元:

# 每1分鐘執行一次command

* * * * * command

每小時的第3和第15分鐘執行

3,15 * * * * command

# 在上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * * command

# 每隔兩天的上午8點到11點的第3和第15分鐘執行

3,15 8-11 */2 * * command

# 每個星期一的上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * 1 command

# 每晚的21:30重啟smb

30 21 * * * /etc/init.d/smb restart

# 每月1、10、22日的4 : 45重啟smb

45 4 1,10,22 * * /etc/init.d/smb restart

# 每週

六、週日的1 : 10重啟smb

10 1 * * 6,0 /etc/init.d/smb restart

# 每天18 : 00至23 : 00之間每隔30分鐘重啟smb

0,30 18-23 * * * /etc/init.d/smb restart

# 每星期六的晚上11 : 00 pm重啟smb

0 23 * * 6 /etc/init.d/smb restart

# 每一小時重啟smb

\* */1 * * * /etc/init.d/smb restart

# 晚上11點到早上7點之間,每隔一小時重啟smb

\* 23-7/1 * * * /etc/init.d/smb restart

# 每月的4號與每週一到週三的11點重啟smb

0 11 4 * mon-wed /etc/init.d/smb restart

# 一月一號的4點重啟smb

0 4 1 jan * /etc/init.d/smb restart

# 每小時執行/etc/cron.hourly目錄內的指令碼

01 * * * * root run-parts /etc/cron.hourly

run-parts這個引數了,如果去掉這個引數的話,後面就可以寫要執行的某個指令碼名,而不是目錄名了

特殊字元	含義

@reboot 在每次啟動時執行一次

@yearly 每年執行一次,等同於 「0 0 1 1 *」.

@annually (同 @yearly)

@monthly 每月執行一次, 等同於 「0 0 1 * *」.

@weekly 每週執行一次, 等同於 「0 0 * * 0」.

@daily 每天執行一次, 等同於 「0 0 * * *」.

@midnight (同 @daily)

@hourly 每小時執行一次, 等同於 「0 * * * *」.

例如

每小時執行一次 ntpdate 命令

@hourly /path/to/ntpdate
每條任務排程執行完畢,系統都會將任務輸出資訊通過電子郵件的形式傳送給當前系統使用者,這樣日積月累,日誌資訊會非常大,可能會影響系統的正常執行,因此,將每條任務進行重定向處理非常重要。

例如,可以在crontab檔案中設定如下形式,忽略日誌輸出:

0 */3 * * * /usr/local/apache2/apachectl restart > /dev/null 2>

&1

/dev/null 2>&1表示先將標準輸出重定向到/dev/null,然後將標準錯誤重定向到標準輸出,由於標準輸出已經重定向到了/dev/null,因此標準錯誤也會重定向到/dev/null,這樣日誌輸出問題就解決了。

新建立的cron job,不會馬上執行,至少要過2分鐘才執行。如果重啟cron則馬上執行。

當crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或者檢視日誌看某個job有沒有執行/報錯

$ tail -f /var/log/cron
它從crontab目錄(/var/spool/cron)中刪除使用者的crontab檔案。刪除了該使用者的所有crontab都沒了。

Cron 定時任務 時間設定

crontriggers往往比 trigger更有用,如果您需要基於日曆的概念,而非 trigger完全指定的時間間隔,的發射工作的時間表。crontrigger,你可以指定觸發的時間表如 每星期五中午 或 每個工作日9 30時 甚至 每5分鐘一班9 00和10 00逢星期一上午,星期三星期五 即便...

Linux定時任務cron詳解

每天下午5點 差不多剛好是下班的時間 以root身份將 media station document book目錄下所有的doc檔案打包成book.tar.gz,並且存放在快閃儲存器 media disk中。最後儲存檔案並退出編輯器,該配置會自動生效。0 17 root tar czf media ...

Cron 定時任務

一般系統都會有定時任務存在,比如訂單系統,會根據定時任務來實時同步訂單狀態,同步交易狀態等等。定時任務可以使用quartz 定時任務,也可以自己寫乙個任務排程系統,只要能實現功能就可以。下面我簡單介紹一下quartz 定時任務配置,需要配置三個bean,分別為 quartz,trigger,sche...