我在macos,并计划一个节点脚本作为一个cronjob。我正在将cron作业的日志保存到一个文件中。当脚本使用我在cronjob中的相同命令从shell手动执行时,它成功地执行,但是它会从cronjob中产生错误。
该脚本使用snoowrap请求从reddit获取顶级帖子。我想这就是错误的来源。错误是:
RangeError: Maximum call stack size exceeded
at /Users/kiro/Documents/learns/myproj/node_modules/snoowrap/dist/objects/Listing.js:231:21
at tryCatcher (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/promise.js:547:31)
at Promise._settlePromise (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/promise.js:604:18)
at Promise._settlePromise0 (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/promise.js:649:10)
at Promise._settlePromises (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/promise.js:729:18)
at _drainQueueStep (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/async.js:93:12)
at _drainQueue (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/async.js:86:9)
at Async._drainQueues (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (/Users/kiro/Documents/learns/myproj/node_modules/bluebird/js/release/async.js:15:14)
at processImmediate (node:internal/timers:466:21)
node:internal/process/promises:265
triggerUncaughtException(err, true /* fromPromise */);我在crontab中使用的命令是
~/Documents/learns/myproj/job.sh >> ~/Documents/learns/myproj/cron.log 2>&1,job.sh有
~/.nvm/versions/node/v16.14.0/bin/node ~/Documents/learns/myproj/build/index
这是代码中产生错误的部分。
await this.redditClient
.getSubreddit(subreddit)
.getTop({ time: "day", limit: 400, count: 400 });我也尝试过传递--max-stack-size 32000,但仍然给出了相同的错误。
原因是什么,我该如何解决?
发布于 2022-10-15 11:58:52
说出来很难不看你的代码。我最好的猜测是,在没有等待前一个函数完成的情况下,您触发了太多的函数。尝试使您的代码同步运行,甚至更好地查看Call async/await functions in parallel
https://stackoverflow.com/questions/74078561
复制相似问题