我正在使用ec2实例,并尝试在ssh之后在另一个实例上执行ruby脚本到该实例。
我有一个更新配置文件的ruby脚本,所以我需要以超级用户身份运行该脚本。当我在该实例sudo ruby recreate-532d01c.rb
上手动运行脚本时,出现的错误是
sudo: ruby: command not found
运行没有root权限的简单脚本,例如。ruby file_1.rb
。
使用rvmsudo代替sudo执行带有警告的脚本,
ubuntu@ip-10-0-0-111:~$ rvmsudo ruby recreate-82bb000012.rb
Warning: can not check `/etc/sudoers` for `secure_path`, falling back to call via `/usr/bin/env`, this breaks rules from `/etc/sudoers`. Run:
export rvmsudo_secure_path=1
to avoid the warning, put it in shell initialization file to make it persistent.
In case there is no `secure_path` in `/etc/sudoers`. Run:
export rvmsudo_secure_path=0
to avoid the warning, put it in shell initialization file to make it persistent.
我尝试从其中一个实例的rails控制台执行以下命令进行测试,但无法将ruby识别为命令
1.9.3-p545 :002 > system("ssh -i /home/ubuntu/.ssh/own_key.pem ubuntu@**.***.***.** ruby execute-52d.rb")
bash: ruby: command not found
我在网上尝试了可能的解决方案,但无法解决问题。我为我的一个旧aws帐户运行相同的配置,这是一个新创建的帐户。不确定这是否会以任何方式出现问题,因为目前ec2实例默认属于vpc并且在2013年12月之后有一些变化
答案 0 :(得分:0)
与您的VPC无关。因此,当您使用sudo
运行ruby脚本时,user
正在使用的环境不会为Ruby设置。
听起来您可能正在使用rvm而且您可能使用“单个用户”进行设置。配置。
尝试以user
:
which ruby
并查看ruby可执行文件所在的位置。这就是你必须确保当你将你的脚本作为sudo运行时它在PATH中可用。
最糟糕的情况是,您必须使用多用户配置重新安装rvm,这在您使用sudo
运行时应该有效:
user$ \curl -sSL https://get.rvm.io | sudo bash -s stable