【问题标题】:Executing NodeJS via crontab throws an error通过 crontab 执行 NodeJS 会引发错误
【发布时间】:2020-12-17 02:58:14
【问题描述】:

我有一个使用 discord.js 模块的 NodeJS 脚本。 当我通过终端执行它时,它可以完美运行。

const fs = require('fs');
const Discord = require('discord.js');
client = new Discord.Client(); client.on('ready', async() => {
        console.log('I am ready!');
        const dev = await client.users.fetch(2396720);
        const json = JSON.stringify(dev);
        fs.writeFile('/var/www/html/discord.json', json, function (err) {
        if (err) throw err;
        console.log('Saved!');
        process.exit(0);
        });
});
client.login('Mjky_Pn3Bk');

但是,当我使用 crontab 安排它时

* * * * * node /var/www/UserToJSON/index.js >> /tmp/results.log 2>&1

我收到此错误

/var/www/UserToJSON/node_modules/discord.js/src/client/Client.js:41
    } catch {
            ^

SyntaxError: Unexpected token {
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/var/www/UserToJSON/node_modules/discord.js/src/index.js:8:11)

【问题讨论】:

  • 在终端和通过 crontab 尝试 which nodenode -v。发布输出。
  • 来自 crontab 的 v8.17.0 和来自控制台的 v12.18.3。使用which node时crontab不输出
  • 好像crontab有不同版本的nodejs,正在寻找解决方案
  • 您需要从您的发行版中卸载节点包。
  • which node 通过 crontab 输出 /usr/bin/node /usr/local/bin/node 通过控制台

标签: node.js linux npm cron


【解决方案1】:

Crontab 执行了一个过时的分发节点包,放在 /usr/bin/ 下

解决办法是改用普通用户安装的node版本,位于/usr/local/bin

这就是 crontab 行的样子:

* * * * * /usr/local/bin/node /var/www/UserToJSON/index.js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2020-11-19
    • 2011-09-15
    相关资源
    最近更新 更多