一妻献、什么是crontab
crontab
命令常見于Unix 和 類Unix的操作系統(tǒng)中慌盯,用于設(shè)置周期性被執(zhí)行的指令掌挚。該命令從標(biāo)準(zhǔn)輸入設(shè)備讀取指令砰诵,并將其存放于 crontab
文件中,一共之后讀取和執(zhí)行征唬。該詞來源于希臘語,愿意市時(shí)間茁彭。crontab
存儲(chǔ)的指令被守護(hù)進(jìn)程激活总寒,crond常常在后臺(tái)運(yùn)行,每一分鐘檢查是否有預(yù)定的作業(yè)需要執(zhí)行理肺。這類作業(yè)一般稱為 cron jobs
二摄闸、crontab 參數(shù)
使用 crontab
需要5個(gè)數(shù)字來定時(shí)時(shí)間,最后一個(gè)位置為命令占位妹萨。
具體數(shù)字如下

-e [UserName]: 執(zhí)行文字編輯器來設(shè)定時(shí)程表年枕,內(nèi)定的文字編輯器是 VI,如果你想用別的文字編輯器乎完,則請(qǐng)先設(shè)定 VISUAL 環(huán)境變數(shù)來指定使用那個(gè)文字編輯器(比如說 setenv VISUAL joe)
-r [UserName]: 刪除目前的時(shí)程表
-l [UserName]: 列出目前的時(shí)程表
-v [UserName]:列出用戶cron作業(yè)的狀態(tài)
在以上各個(gè)字段中熏兄,還可以使用以下特殊字符:
星號(hào)():代表所有可能的值,例如month字段如果是星號(hào),則表示在滿足其它字段的制約條件后每月都執(zhí)行該命令操作摩桶。*
逗號(hào)(,):可以用逗號(hào)隔開的值指定一個(gè)列表范圍桥状,例如,“1,2,5,7,8,9”
中杠(-):可以用整數(shù)之間的中杠表示一個(gè)整數(shù)范圍典格,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時(shí)間的間隔頻率岛宦,例如“0-23/2”表示每?jī)尚r(shí)執(zhí)行一次。同時(shí)正斜線可以和星號(hào)一起使用耍缴,例如/10砾肺,如果用在minute字段,表示每十分鐘執(zhí)行一次防嗡。*
三变汪、crontab 實(shí)例
-
每天早上6點(diǎn)
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出蚁趁,因?yàn)閏ron把任何輸出都email到root的信箱了裙盾。
-
每?jī)蓚€(gè)小時(shí)
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
-
晚上11點(diǎn)到早上8點(diǎn)之間每?jī)蓚€(gè)小時(shí),早上八點(diǎn)
0 23-7/2他嫡,8 * * * echo "Have a good dream:)" >> /tmp/test.txt
-
每個(gè)月的4號(hào)和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn)
0 11 4 * 1-3 command line
-
1月1日早上4點(diǎn)
0 4 1 1 * command line
每次番官,我都需要適用crontab -e
來編輯定時(shí)任務(wù)。并且crontab
自帶的數(shù)字表達(dá)式不太好理解钢属。所以徘熔,就出現(xiàn)了 whenever
。
四淆党、什么是whenever
官方的解釋
Whenever is a Ruby gem that provides a clear syntax for writing and deploying cron jobs.
簡(jiǎn)單來說酷师,就是whenever
是一個(gè)用來寫定時(shí)任務(wù)的 Ruby Gem
∪疚冢可以適用DSL
方式來書寫定時(shí)任務(wù)山孔。Rubiest
真實(shí)幸福啊:杀铩台颠!
1、安裝Gem
gem install whenever
或者
gem 'whenever', :require => false
2勒庄、初始化
進(jìn)入到你的Rails
項(xiàng)目中執(zhí)行
wheneverize .
執(zhí)行完畢串前,會(huì)生成一個(gè)config/schedule.rb
, 所有的定時(shí)任務(wù)的DSL
都可以在該文件中編寫
3、常用命令
-i [identifier] 更新新定時(shí)任務(wù)锅铅,默認(rèn)更新 schedule.rb 文件中的全部
-w, --write-crontab [identifier] 寫定時(shí)任務(wù)酪呻,默認(rèn)更新 schedule.rb 文件中的全部
-c, --clear-crontab [identifier] 清除 crontab
-v, --version 查看版本
五减宣、whenever實(shí)例
## 每三個(gè)小時(shí)執(zhí)行定時(shí)任務(wù)
every 3.hours do
runner "MyModel.some_process"
rake "my:rake:task"
command "/usr/bin/my_great_command"
end
## 每天的 4.30 執(zhí)行定時(shí)任務(wù)
every 1.day, :at => '4:30 am' do
runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end
## 每一個(gè)小時(shí)執(zhí)行定時(shí)任務(wù)
every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
runner "SomeModel.ladeeda"
end
## 每個(gè)月的27~31 號(hào)執(zhí)行
every '0 0 27-31 * *' do
command "echo 'you can use raw cron syntax too'"
end
參考: