Node命令手动运行正常但crontab执行Discord bot时报错求助
问题根因
crontab运行时不会加载当前登录用户的个人环境变量(包括.bashrc、版本管理器如nvm的配置等),你手动执行脚本时调用的是升级后的v16.13.0版本node,但crontab执行时默认调用的是系统自带的更低版本node,低版本node不支持ES2020引入的可选链(?.)语法,因此会在对应代码行抛出语法错误。
修复方案
方案一:修改脚本内node、npm命令为绝对路径(推荐,稳定性更高)
- 先手动执行
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 - 替换原有脚本内的对应命令,修改后参考:
#!/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
相关产品推荐
相关产品推荐

