You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node命令手动运行正常但crontab执行Discord bot时报错求助

问题根因

crontab运行时不会加载当前登录用户的个人环境变量(包括.bashrc、版本管理器如nvm的配置等),你手动执行脚本时调用的是升级后的v16.13.0版本node,但crontab执行时默认调用的是系统自带的更低版本node,低版本node不支持ES2020引入的可选链(?.)语法,因此会在对应代码行抛出语法错误。

修复方案

方案一:修改脚本内node、npm命令为绝对路径(推荐,稳定性更高)

  1. 先手动执行which node和which npm,记录两个命令输出的绝对路径,例如nvm安装的node路径一般为/home/pi/.nvm/versions/node/v16.13.0/bin/node、npm路径为/home/pi/.nvm/versions/node/v16.13.0/bin/npm
  2. 替换原有脚本内的对应命令,修改后参考:
#!/usr/bin/bash
echo "Killing application..."
pkill -9 node
echo "Moving to bot dir..."
cd /home/pi/theBot/
git pull
# 替换为你查询到的npm绝对路径
/home/pi/.nvm/versions/node/v16.13.0/bin/npm install
echo "Starting bot..."
# 替换为你查询到的node绝对路径
/home/pi/.nvm/versions/node/v16.13.0/bin/node /home/pi/theBot/bot.js

方案二:crontab内新增PATH配置

执行crontab -e打开定时任务配置,在所有定时任务的最上方新增PATH声明,将你的node版本路径放在最前面,参考:

PATH=/home/pi/.nvm/versions/node/v16.13.0/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
验证方法

可临时新增一个每分钟执行的测试定时任务,确认脚本运行正常、bot成功启动后,再恢复为凌晨2点执行的原有规则即可。

内容的提问来源于stack exchange,提问作者Cpt Palindrome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:15:01