在运维中,远程执行命令是必要的一步,比如自动打包java项目,有的时候,为了方便测试与部署,需要在本地电脑上打包自己开发好的项目,自动上传到远程服务器,及自动重启部署jar包。
新手总是会遇到各种坑,我就遇到了这样的问题,有两个脚本,A脚本是负责本地构建java项目,构建成功之后将jar上传到服务器,并远程执行B脚本,B脚本的功能是删除旧的jar,及杀死当前运行的程序,然后重新启动。重新启动的python方法如下:
def start_server(jar_name,target_jar_dir):
os.chdir(target_jar_dir)
run_cmd = "nohup java -server -jar %s &" % jar_name
print("开始执行启动命令: %s" % run_cmd)
result = os.system(run_cmd)
if result != 0:
print("执行命令失败,请检查错误!!")
上面这个方法,手动在服务器上面执行是没有问题的,可以正常启动jar包服务,但是如果是使用A脚本远程执行命令的话,就会报下面的错误:
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
但是单独在服务器上面执行B脚本的时候是没有任何问题了。
百度了很长时间也没有找到答案,不过最终我找到解决办法了,就是将java命令换成绝对路径的,如下所示:
def start_server(jar_name,target_jar_dir):
os.chdir(target_jar_dir)
run_cmd = "nohup /home/jdk/jdk1.8.0_161/bin/java -server -jar %s &" % jar_name
print("开始执行启动命令: %s" % run_cmd)
result = os.system(run_cmd)
if result == 0:
print("执行成功,请查看日志确认!!")
else:
print("执行命令失败,请检查错误!!")
成功解决了这个问题
版权声明:本文为youxijishu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。