Ubuntu 安装 pm2 报错求解释
发布于 11 年前 作者 zhs077 7004 次浏览 最后一次编辑是 8 年前
zhs[@ubuntu](/user/ubuntu):~/Desktop/node-v0.10.26$ pm2 -V
0.7.8
zhs[@ubuntu](/user/ubuntu):~/Desktop/node-v0.10.26$ pm2 start

/usr/local/lib/node_modules/pm2/bin/pm2:383
  fs.exists(cst.DEFAULT_FILE_PATH, function(exist) {
     ^
TypeError: Object #<Object> has no method 'exists'
    at init (/usr/local/lib/node_modules/pm2/bin/pm2:383:6)
    at Object.<anonymous> (/usr/local/lib/node_modules/pm2/bin/pm2:403:3)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:32)
    at Function._load (module.js:311:12)
    at Array.0 (module.js:484:10)
    at EventEmitter._tickCallback (node.js:190:39)
18 回复

楼主的代码没标记, 我给标记了… Markdown 啊… 提示错误的 exists 方法不存在, 两种可能, 1, 低版本的 Node 没有这个方法… 看上边可能是 0.10 , 应该不会啊 2, 要么是 fs 对象被什么覆盖了, 检查下对象是不是对的? 另外 pm2 start 不是应该加参数再跑的么?

pm2 -V 表示你以及装上pm2了

cd到你要启动脚本的文件夹,

pm2 start xxx.js 就好了

pm2 start 后边应该跟上 需要执行的脚本哈

现在pm2 -v -start都报这个错蛋疼。

@zhs077 爱莫能助啊, 列更多细节吧… 比如怎么装的 Node, 怎么装的 pm2 , 想运行什么之类的… 看看能不能发现有可能出问题的地方

zhs@ubuntu:~/pm2_test$ ls a.js zhs@ubuntu:~/pm2_test$ sudo pm2 start a.js [sudo] password for zhs:

/usr/local/lib/node_modules/pm2/bin/pm2:383 fs.exists(cst.DEFAULT_FILE_PATH, function(exist) {

@jiyinyiyong Node 用源码安装的,版本最新的10.26,安装PM2使用的是国内的镜像,安装没报错。

pm2 0.7.8 源码也就是这里: https://github.com/Unitech/pm2/blob/0.7.8/bin/pm2#L383 对应楼主的这里 /usr/local/lib/node_modules/pm2/bin/pm2:383 打开文件, 在这一行之前插入下面的代码看看结果怎么样吧:

console.log(Object.keys(fs), process.version)

[ ‘Stats’, ‘readFile’, ‘readFileSync’, ‘close’, ‘closeSync’, ‘open’, ‘openSync’, ‘read’, ‘readSync’, ‘write’, ‘writeSync’, ‘rename’, ‘renameSync’, ‘truncate’, ‘truncateSync’, ‘rmdir’, ‘rmdirSync’, ‘fdatasync’, ‘fdatasyncSync’, ‘fsync’, ‘fsyncSync’, ‘mkdir’, ‘mkdirSync’, ‘sendfile’, ‘sendfileSync’, ‘readdir’, ‘readdirSync’, ‘fstat’, ‘lstat’, ‘stat’, ‘fstatSync’, ‘lstatSync’, ‘statSync’, ‘readlink’, ‘readlinkSync’, ‘symlink’, ‘symlinkSync’, ‘link’, ‘linkSync’, ‘unlink’, ‘unlinkSync’, ‘fchmod’, ‘fchmodSync’, ‘chmod’, ‘chmodSync’, ‘fchown’, ‘fchownSync’, ‘chown’, ‘chownSync’, ’_toUnixTimestamp’, ‘utimes’, ‘utimesSync’, ‘futimes’, ‘futimesSync’, ‘writeFile’, ‘writeFileSync’, ‘watch’, ‘watchFile’, ‘unwatchFile’, ‘realpathSync’, ‘realpath’, ‘createReadStream’, ‘ReadStream’, ‘FileReadStream’, ‘createWriteStream’, ‘WriteStream’, ‘FileWriteStream’, ‘SyncWriteStream’ ] ‘v0.6.19’

@zhs077 就是说你的 Node 实际上是 0.6… 重装吧 process.version 是打印 Node 版本的代码…

@jiyinyiyong node -v 是0.10.26 啊

ubuntu server会有这个问题,解决的方式是这样的,你先用npm install pm2在当前文件夹中,然后将这个文件夹移动到全局的文件夹里面,然后修改文件夹的权限就可以了。

@zhs077 不知道怎么回事… Node 命令行里的 process.version 显示是多少? 这个调用很奇怪啊… 有没有可能实际上你装了两个 Node, 然后因为不同调用者, Bash 中的环境变量不一样, 结果调用了不同的 node 命令

我用ubuntu不是server版本的按照你的方式还是不行

@jiyinyiyong 我那台ubuntu装的node版本都是10以上的不会是8的。

@zhs077 你的代码显示是 0.6.19, 这个看你自解解决了…

@jiyinyiyong 唉,个人怀疑是PM2的bug,我centeOS安装时候就报错了。。。

@zhs077 我刚才说的有点问题,先要在当前文件安装pm2,这步骤出问题就撞墙死了吧.然后将node_modules下的pm2移动到node的全局node_modules里面,例如0.11.9/node_modules这样的路径之下,然后在node的bin目录下用ln命令将node_modules中的pm2/bin目录下的pm2的可执行程序链接到node的bin目录中就可以了。

回到顶部