一共有 3 台 staging 环境服务器,5 台生产环境服务器,centos7系统。前阵子刚给所有研发配置了自己的账号,今天有小伙伴说,在其中两台服务器上 sudo pm2 list 提示:

sudo:pm2:找不到命令

经过一番查找,原因是这样的:

在运行 sudo 命令时,系统会按照 sudo visudo 中的配置去设置 secure_path (安全路径),以限制用户行为。默认的安全路径如下:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

其他正常的服务器的 node 是安装在 /usr/bin 目录下,命令可以正常运行。这两台服务器是后来配置的,node 的安装路径是在

/usr/local/node/vx.xx/bin/

因此提示找不到命令。

网上常见的解决方法是取消 env_reset,并在 bashrc 中用别名重新设置 sudo 命令使用的 PATH 变量。

但是考虑到安全限制以及这个特定的问题,在 /usr/bin 中创建了 pm2 和 node 这两个软连接,分别指向 node 安装目录的对应命令:

ln -s /usr/local/node/vx.xx/bin/node node
ln -s /usr/local/node/vx.xx/bin/pm2 pm2

sudo pm2 提示 找不到命令的更多相关文章

  1. 使用sudo执行命令的时候提示找不到命令

    事出有因, 源自使用源码编译 nginx , 在 /usr/local/sbin/ 目录下创建了nginx 启动的符号链接 , 执行 sudo nginx 的时候提示找不到命令, 但是使用普通用户身份 ...

  2. lspci查看硬件信息时提示找不到命令

    系统环境:centos 6.3 X64 错误信息:[root@localhost ~]# lspci-bash: lspci: command not found 问题原因:这是因为没有安装pciut ...

  3. Jenkins_构建任务提示找不到命令的处理方法

    问题现象 部署pytest环境后,在linux上能执行命令,但是使用jenkins构建就提示找不到命令. 问题分析 可能是...jenkins中执行时,默认使用的是linux中的jenkins用户权限 ...

  4. jenkins执行shell命令提示找不到命令解决办法

    用jenkins执行shell脚本,执行一条命令: #唤醒休眠手机 adb shell input keyevent 提示: [adb] $ /bin/sh -xe /Users/xxxxx/tool ...

  5. 远程ssh执行命令时提示找不到命令

    最开始的时候碰到这种问题,是在hadoop003上配置了jdk1.8, 在hadoop002上执行ssh hadoop003 java -version提示没有命令,先ssh hadoop003然后执 ...

  6. Appium命令行启动,提示找不到命令,本地没有appium.cmd文件

    安装appium时,直接从github上下载的appium-desktop-windows版本,安装后,从打开桌面端Server,能启动服务,appium-doctor也能正常运行. 但奇怪的地方来了 ...

  7. ubuntu sudo: pip:找不到命令

    编辑文件 /etc/sudoers sudo vi /etc/sudoers 将Defaults env_reset ,改为 Defaults    !env_reset 编辑文件-/.bashers ...

  8. Linux sudo 找不到命令

    普通用户执行需要root权限的命令,提示"找不到命令",但是root用户执行该命令不报错,可能是由于该命令未处在sudo搜索的路径. 本文以sudo easy_install 为例 ...

  9. sudo source /etc/profile 提示找不到source命令

    今天修改了/etc/profile,需要用source一下,于是写入命令 sudo source /etc/profile 提示找不到source命令 改成    sudo . /etc/profil ...

随机推荐

  1. setTimeOut一些注意的地方

    for (var i = 0; i < data.length; i++) { var flashID = data[i].ID; //setTimeOut(removeFlashDiv(fla ...

  2. PHP中str_replace和substr_replace有什么区别?

    两个函数的定义:(1)str_replace() 函数替换字符串中的一些字符(区分大小写). 该函数必须遵循下列规则: 如果搜索的字符串是一个数组,那么它将返回一个数组. 如果搜索的字符串是一个数组, ...

  3. activemq 实战 四 传输连接器-Transport connectors 4.2

    In order to exchange messages, producers and consumers (clients) need to connect to the broker. This ...

  4. Python class的属性访问控制和内建函数重写实现高级功能以及@property

    一.类属性的访问控制 Python Class确实是博大精深,我们还是来温习一下属性的访问控制作为开(fu)场(xi). 首先_varname是可以访问的,__varname是不能直接访问(原理是__ ...

  5. 配置maven使用nexus

    本文简单介绍使用配置maven使用nexus仓库,在团队中使用nexus,避免每个人都从中央仓库去下载依赖,节省带宽,提高下载速度,同时也减少了中央仓库的压力 配置在maven中使用nexus很简单( ...

  6. java类的成员变量和局部变量的区别

    转自:https://jingyan.baidu.com/article/03b2f78c1ba2d05ea237ae9b.html 在类中位置不同:成员变量:在类中方法外.局部变量:在方法定义中或者 ...

  7. 宝塔面板快速开启https服务

    最近在做小程序开发,急需要一个https的域名,首先我的域名是阿里云的,服务器是腾讯云的,操作都一样: 无论阿里云还是腾讯云,配置SSL是针对服务器的,所以首先是要去申请 腾讯/阿里云服务器的SSL( ...

  8. 微信小程序 --- loading提示框

    loading:提示框: 效果: loading和toast和像,只不过 toast 是设置结束时间,时间到了去触发bindchange事件,进行隐藏. 但是 loading 是没有办法设置事件让其隐 ...

  9. SpringMVC中使用@ResponseBody注解将任意POJO对象返回值转换成json进行返回

    @ResponseBody 作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区. ...

  10. HDU 5618 Jam's problem again(三维偏序,CDQ分治,树状数组,线段树)

    Jam's problem again Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...