RT,我想要在A电脑的Linux上通过ssh命令执行B电脑Linux上的java程序。出现如下问题:
A,B电脑的用户都叫sam,B的IP是192.168.1.X,B电脑的~目录下有个a.java,并且已经编译完成。
我直接 ssh [email protected] ‘java a’ ,报错:bash:java未找到命令。
但是如果先ssh [email protected]进入B电脑,然后在下一行输入java a,便可以执行,希望大神帮我解释一下,有点蒙。
A,B电脑的用户都叫sam,B的IP是192.168.1.X,B电脑的~目录下有个a.java,并且已经编译完成。
我直接 ssh [email protected] ‘java a’ ,报错:bash:java未找到命令。
但是如果先ssh [email protected]进入B电脑,然后在下一行输入java a,便可以执行,希望大神帮我解释一下,有点蒙。
解决方案 »
- netfilter钩子函数打印WARNING: at net/core/dev.c:2253 skb_warn_bad_offload+0xcd/0xda()
- Linux内核开发 主次设备号疑惑
- 为什么监听端口会有两个
- kmemleak 如何查找泄露点???
- 有个问题,这里提出来,看看有没有遇到过的同行:网内有安装了solaris10的服务器1和安装了redhat6.2的服务器2,安装了Oracle Linux6.6
- Win10安装linux centos7
- linux上安装make出现fix-missing怎么办?
- nginx反向代理,80端口跳转到8081端口,但是8081的端口丢失!!!!求大佬告诉一下我怎么回事!
- Linux文件系统损坏,文件权限是问号
- vsfpd的问题
- linux脚本
- 求助大牛,VMware下centos7网卡设置
例如ssh [email protected] '/java/jdk/bin/java a'就好用,很明显是环境变量出了问题,但是我在AB两个机器上配置的环境变量是完全一样的。包括root的/etc/profile和用户sam的~/.bash_profile,相当于四个文件都是一样的配置。那么问题来了,是不是因为ssh执行命令时因为它是个短链接,没有打开终端,所以不会去加载环境变量从而导致不识别java命令呢?如果是这样的话,有没有什么更好的解决办法呢,总不能每次ssh执行命令都用java的绝对路径去执行吧
根据ssh的帮助文档:If command is specified, command is executed on the remote host instead of a login shell.
你不是直接登录主机的,所以这些.bash_profile是没有执行的,即前面的env看到的,只有一些基础的shell变量值,若你不想带全路径,就需要把可执行命令放到这些系统默认的PATH下
您的办法我起初也有试过。在B端写了个脚本,脚本里面写了java a这行代码,然后在A端运行这个脚本的时候,他也会报错,比如java a这行代码在脚本的第三行,他就会提示脚本的第三行有误,java未找到该命令,是一样的效果。难道还要在脚本里面配置环境变量么?请不吝赐教。
您说的我也听明白了。正常访问要带全路径。如果想不带全路径,是要在/etc/profile中配置path么?但是我在/etc/profile中已经做了和~/.bash_profile一样的配置呀,为什么还是不可以呢?
您的办法我起初也有试过。在B端写了个脚本,脚本里面写了java a这行代码,然后在A端运行这个脚本的时候,他也会报错,比如java a这行代码在脚本的第三行,他就会提示脚本的第三行有误,java未找到该命令,是一样的效果。难道还要在脚本里面配置环境变量么?请不吝赐教。
用绝对路径
您说的我也听明白了。正常访问要带全路径。如果想不带全路径,是要在/etc/profile中配置path么?但是我在/etc/profile中已经做了和~/.bash_profile一样的配置呀,为什么还是不可以呢?不是,前面已经说过了,你远程执行,并不是真的终端,所以不会执行用户的.bahs_profile的,没有执行相当于没有这个环境变量,这个就有点类似su -sam 和su sam 后你的env是不同的一样。不想带全路径,你就ssh [email protected] ‘cd '/java/jdk/bin/;./java a’
用全路径不是不可以, 但是很傻
比如
for (( ... )) ; do
ssh $host java spring-boot.jar
done
不一定每台机器java路径是一致的, 所以每台都得知道路径
楼主找到药了吗?
PATH="usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.8.0_144/bin"然后 ssh .... java