我正在尝试在 Ubuntu 18.04 中设置一个crontab
进程来定期检查状态pm2
并在必要时重新启动它。因为我更熟悉 JavaScript,所以我决定让 crontab 进程运行一个节点文件,该文件从 pm2 获取 JSON 读数,以检查 pm2 中每个应用程序的状态。如果检测到任何问题,JS 文件将bash
使用shellJS
. 就这样:
- crontab
- 节点脚本
- 如果 pm2 应用程序有问题,请执行 bash 脚本
- 删除现有的 pm2 应用程序并启动它的新实例
但是,当我从 JS 文件执行此操作时,我收到以下源自 bcrypt 的错误:
Error: The module '/root/myProject/node_modules/bcrypt/lib/binding/bcrypt_lib.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 67. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
at Object.Module._extensions..node (module.js:681:18)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/root/myProject/node_modules/bcrypt/bcrypt.js:6:16)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/root/myProject/models/User.js:3:16)
at Module._compile (module.js:652:30)
这很奇怪。如果我从命令行运行 bash 脚本,或者直接在命令行中运行命令,我不会收到错误 - 只有当我从 shellJS/node.js 启动它时。
这是从节点调用它的行:
shell.exec('/var/scripts/restart-pm2.sh')
这是restart-pm2.sh
文件中的行:
pm2 start /root/ecosystem.config.js --only index
再一次,运行那个确切的命令可以正常工作。
更新:
我尝试直接从 cron 运行 bash 脚本,但我也得到了错误。因此,显然不是 shellJS/node 导致错误,而是与 cron 上下文有关。