2016-11-23 61 views
0

我需要運行一個sh腳本send.sh如下內容:cron運行不的NodeJS工作

node send.js -q 8435924032 >> send.log 

如果我用crontab中運行它*/2 * * * * /home/app/send.sh 沒有什麼outputed。

而且有其顯示由cron進程所引發的錯誤郵件:

ReferenceError: Promise is not defined 
    at requestURL (/home/app/getData.js:34:16) 
    at Object.getData (/home/app/getData.js:15:18) 
    at /home/app/send.js:173:41 
    ... 

但是它給了我正確的輸出,並沒有錯誤,當我直接運行sh send.sh

有人能幫助?我想每兩分鐘運行一次程序。 我試過PM2但這樣的cron功能不起作用。

回答

1

你檢查了用戶root的node.js版本嗎?

Crontab默認以root用戶身份運行shell腳本,這意味着它使用root用戶node.js而不是用於運行腳本的節點版本。

早期版本的node.js不支持Promise。

如果你有root權限,你可以檢查root用戶通過Node.js的版本,

$sudo su 
$node -v 

,或者在你的Node.js腳本,

console.log(process.versions); //which contains running node version 
+0

你能告訴我怎麼檢查用戶根節點的版本? – user3711105

+0

如果您有root權限,請嘗試此操作。 – iKoala

+0

@@什麼是魔法,'node -v'給了我'v6.6.0'。但是'sudo su node -v'給了我'v0.10.42' – user3711105

0

做一些修改你的shell文件:

使用絕對路徑文件

node /<path>/<to>/<file>/send.js -q 8435924032 >> send.log 

或瀏覽到您的目錄

cd /<path>/<to>/<file>/; 
node ./send.js -q 8435924032 >> send.log