node.js - 通过 crontab 执行 NodeJS 会引发错误
问题描述
我有一个使用 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 执行了一个过时的分发节点包,放在 /usr/bin/
解决方案是使用普通用户安装的节点版本,位于 /usr/local/bin
这就是 crontab 行的样子:
* * * * * /usr/local/bin/node /var/www/UserToJSON/index.js
推荐阅读
- sql - Bigquery 活跃用户计数不准确(谷歌分析)
- node.js - 使用伊斯坦布尔时,MongoDB 中的日期字段偏移一小时
- json - 使用 Ajax 将 JSON 作为 POST 发送到 Django
- python - 原始 wav 字节到 uint 数组或其他格式
- php - 类金额未找到贝宝
- durandal - Durandal:使用路由获取当前页面 URL
- html - 从 XML 页数生成 PDF 是错误的
- android - android:filterTouchesWhenObscured 在哪里?
- wpf - 带有日期和附加字符串的 Stringformat WPF
- php - 图片不显示在 html img 标签中