背景:蘋果、谷歌的應(yīng)用審核規(guī)則經(jīng)常會(huì)更新,為及時(shí)收到變更通知,最近寫了一個(gè)爬蟲,現(xiàn)在要把這個(gè)爬蟲程序部署到另一臺(tái)Mac電腦上每天8:00、20:00點(diǎn)自動(dòng)執(zhí)行,在網(wǎng)上搜羅了一下,發(fā)現(xiàn)crontab這個(gè)好東西,記錄一下,也分享給大家。
推薦理由
1、crontab 是Mac電腦上系統(tǒng)自帶的工具,因此不需要下載,使用方式也很簡(jiǎn)單,最重要的是設(shè)置好它的定時(shí)規(guī)則 后面再接上我們想要執(zhí)行的指令就行;
2、定時(shí)規(guī)則可以通過(guò)配置自行設(shè)置,不需要在具體任務(wù)內(nèi)部設(shè)置各種定時(shí)器
step1:確認(rèn)電腦中crontab 已運(yùn)行
sudo /usr/sbin/cron start
如果電腦中已經(jīng)運(yùn)行了crontab, 會(huì)有這個(gè)提示
zsh: killed sudo /usr/sbin/cron start
step2:查看當(dāng)前運(yùn)行crontab定時(shí)任務(wù):crontab -l
crontab -l
# 我這臺(tái)Mac剛設(shè)置過(guò)一條自動(dòng)任務(wù),因此顯示:
>0 8,20 * * * cd /Users/xxxxx/Desktop/test && ./App審核規(guī)則爬蟲
setp3:編輯crontab定時(shí)任務(wù): crontan -e
crontan -e
# 鍵盤輸入“i”進(jìn)入編輯模式
0 8,20 * * * cd /Users/xxxx/Desktop/test && ./App審核規(guī)則爬蟲>> /Users/xxxx/Desktop/test/log/log_file.log 2>&1
~
~
~
"/tmp/crontab.gxe0VM2mC3" 1L, 135B
日志重定向
我在結(jié)尾新增了一段指令:
>> /Users/xxxx/Desktop/test/log/log_file.log 2>&1
目的是把App審核規(guī)則爬蟲運(yùn)行日志重定向至指定目錄,不添加這段指令的話,任務(wù)執(zhí)行時(shí),運(yùn)行日志就不那么方便查看
setp4:保存crontab任務(wù)
鍵盤點(diǎn)擊esc退出編輯模式
鍵盤輸入":"進(jìn)入指令模式
鍵盤輸入"wq" 然后回車即可保存
# 當(dāng)然,如果設(shè)置的時(shí)間不對(duì),會(huì)提示錯(cuò)誤,比如把20前加一個(gè)空格
0 8, 20 * * * cd /Users/xxxxx/Desktop/test && ./App審核規(guī)則爬蟲
crontab: installing new crontab
"/tmp/crontab.gxe0VM2mC3":0: bad hour
crontab: errors in crontab file, can't install
Do you want to retry the same edit?
在保存crontab時(shí),就會(huì)提示 bad hour,刪除空格就可以正常保存
保存成功,會(huì)提示
crontab: installing new crontab
step5:停止crontab定時(shí)任務(wù)
如果需要多個(gè)不同的定時(shí)任務(wù),進(jìn)入crontab 編輯模式后,回車新增一條指令即可。
如果要?jiǎng)h除某個(gè)定時(shí),也可以進(jìn)入編輯模式,刪除那一條指令,也可以直接執(zhí)行crontab -r 刪除所有定時(shí)
crontab -r
其他遇到的問(wèn)題:
1、電腦息屏后,任務(wù)沒(méi)有按時(shí)執(zhí)行
原因:Mac 電腦息屏后,crontab 定時(shí)任務(wù)不執(zhí)行,主要原因是cron 守護(hù)進(jìn)程在 Mac 睡眠模式下會(huì)被暫停。
參考博文:
#解決方案:禁用 Mac 的睡眠模式,確保 cron 守護(hù)進(jìn)程一直運(yùn)行
sudo pmset -a disablesleep 1
2、電腦重啟時(shí),希望任務(wù)執(zhí)行一次
原因:Mac 電腦息屏后,crontab 定時(shí)任務(wù)不執(zhí)行,主要原因是cron 守護(hù)進(jìn)程在 Mac 睡眠模式下會(huì)被暫停。
參考博文:
#解決方案:禁用 Mac 的睡眠模式,確保 cron 守護(hù)進(jìn)程一直運(yùn)行
sudo pmset -a disablesleep 1