当前位置: 首页 > 知识库问答 >
问题:

从cron/shelljs-bcrypt重新启动pm2版本错误

司寇高峯
2023-03-14

我试图在Ubuntu18.04中设置一个crontab进程,以便定期检查PM2的状态,并在必要时重新启动它。因为我更熟悉JavaScript,所以我决定让crontab进程运行一个节点文件,该文件从pm2获得JSON读数,以检查pm2中每个应用程序的状态。如果检测到任何问题,JS文件将使用shelljs执行另一个bash脚本。事情是这样的:

    null

但是,当我从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启动它时才会得到错误。

下面是从节点调用它的代码行:

更新:

我试着直接从cron运行bash脚本,也得到了错误。因此,显然不是shelljs/node导致了错误,而是与cron上下文有关。

共有1个答案

章宏恺
2023-03-14

我想出了解决办法。在测试bash脚本时,我注意到我需要确保在ecosystem.config.js文件中有绝对路径引用,以使它在bash脚本/cron中工作。显然,该文件还需要对节点版本的绝对引用。无论出于什么原因,它只在从cron调用时需要这个。

因此,在ecosystem.config.js中的应用程序参数中,我添加了--interpreter标志来引用当前版本节点的绝对路径:

const index = {
    name: 'index',
    script: '/root/myProject/index.js',

    ...other arguments

    interpreter: "/usr/local/bin/node" // added this line
}
 类似资料:
  • 我发现了这个,结果是windows 10上的pm2问题。 那篇文章末尾建议的变通办法似乎很管用。 基本上,首先安装node-cmd,然后创建一个startscript.js:

  • 问题内容: 更改crontable文件后是否必须重新启动cron? 问题答案: 没有。 在cron手册页中: … cron然后将检查所有crontab的修改时间,并重新加载已更改的crontab。因此,无论何时修改crontab文件,都无需重新启动cron 但是,如果您只是想确保已完成, 要么

  • 我有一个脚本(bash),它监视pm2内存使用情况,如果pm2进程占用的内存超过2 GB,则重新启动进程。但是当我从脚本中运行命令(pm2 restart all)时,pm2中的所有进程不断地一次又一次地重新启动。 我正在通过crontab运行这个脚本。 我想要能够成功地重新启动所有的应用程序,而不需要连续的重新启动。

  • 我很难在服务器重新引导时重新启动pm2(它本身和两个节点/express文件,&)。 下面是我尝试的过程: 我在所有可能的组合中运行了上面的命令,但没有任何工作。我试着以根用户的身份运行,但也不起作用。 我的文件包含信息,所以我不知道还可以在哪里查找。 我尝试的其他参考资料... http://pm2.keymetrics.io/docs/usage/startup/ https://www.di

  • 我之前在Eclipse上开发,然后迁移到Android Studio。一切正常,它更好,更快。 我在真实设备上工作,Android Studio可以毫无问题地识别它。 但当我断开并重新连接我的设备时,它不再识别我的设备,我必须退出并重新启动Android Studio。 我找不到像Eclipse特性那样“重置adb”的方法。 可以从Android Studio中重新启动ADB吗?如果是这样,怎么做

  • 当我使用时,我的javascript游戏应用程序将无法工作。当我使用时,游戏工作得很好,但不使用。在服务器上加载index.js文件,但随后给出错误,如: 和 再次,当我使用启动服务器时,程序运行平稳。 以下是我的process.yml文件