crontab定時(shí)執(zhí)行node命令行工具

開(kāi)發(fā)了一個(gè)登錄readfree.me網(wǎng)站的node命令行工具,部署在一臺(tái)云主機(jī)上面。想法是通過(guò) crontab編寫一條規(guī)則:

// crontab -e
0 8 * * * rflogin

在首次登錄后,就可以每日自動(dòng)登錄了。

這樣弄好之后,觀測(cè)了兩天,然而事與愿違,查看readfree.me上簽到記錄好像少了些記錄啊。

不知道所以,于是乎只能查看日志:

查看cron的執(zhí)行日志:

cat /etc/log/cron | grep rflogin
執(zhí)行記錄

可以看到還是執(zhí)行了設(shè)定的命令,然而為什么沒(méi)有登錄?

已經(jīng)執(zhí)行命令,但沒(méi)有登錄,有點(diǎn)和常理相悖論啊,我直接命令行執(zhí)行rflogin都顯示登錄成功的。

于是乎百度、谷歌。。心疲力盡。終究發(fā)現(xiàn)些蛛絲馬跡,執(zhí)行命令可以將輸出導(dǎo)出到一個(gè)日志文件中:

0 8 * * * rflogin  >> /var/log/rflogin.log

這個(gè)是每天8點(diǎn)執(zhí)行,明天8點(diǎn)再來(lái)看看日志?開(kāi)始我就是這樣想的,人老了,思維定勢(shì)有點(diǎn)傷。然而轉(zhuǎn)念一想都是定時(shí)任務(wù),每分鐘執(zhí)行一次不就好了,故先修改為:

// 注意千萬(wàn)加上  2>&1,表示將標(biāo)準(zhǔn)輸出和出錯(cuò)信息都重定向到 rflogin.log中
// 如果沒(méi)有加,我觀測(cè)日志文件是為空的
0 8 * * * rflogin  >> /var/log/rflogin.log  2>&1

然后查看日志這個(gè)日志文件:

cat /var/log/rflogin.log

輸出一大堆我還認(rèn)識(shí)東西:


/var/log/rflogin.log

這就更讓我費(fèi)解了,我明明是使用 npm 全局安裝的, 在命令行里面都能成功,為何crontab就不行?

于是乎想到是不是命令行和crontab執(zhí)行時(shí)的 $PATH不一樣:
修改一下命令:

* * * * * echo $PATH >> /var/log/rflogin.log 2>&1

然后查看日志文件:

image.png

對(duì)比一下果然是是不一樣。
知道原因就好解決了: 參考crontab中PATH的坑 大致知道了原因,也知道修改了:

30 8 * * * export PATH=/root/.nvm/versions/node/v10.13.0/bin:$PATH; rflogin >> /var/log/rflogin.log 2>&1

試用過(guò) . /etc/profile這種方式,還是沒(méi)有生效,故直接手動(dòng)加上環(huán)境變量。

參考:
crontab中PATH的坑
Linux cron運(yùn)行原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容