ssh远程执行遇到的一些坑

一、python模块选择

subprocess:用check_ouput 本想接收返回,但是传参麻烦、执行过程的各种权限问题,最终放弃

os.system:简单粗暴,直接本机执行,最终用这个。缺点是,只有返回码

Tip:python执行命令行不要太过复杂,否则各种奇葩问题无法排查;可以写到shell脚本里面,python去调用脚本

二、命令行写法

1.所以尽量别用 sh 命令去启动脚本(虽然本地能成功启动)。第1)种写法,死活没法启动服务

  1):sshpass -p xxx ssh root@xxx.xxx.xxx.xxx sh  /mnt/home/deploy/credit/pld-risk/service.sh service start

  2):sshpass -p xxx ssh root@xxx.18.xxx.140 'cd /mnt/home/deploy/credit/pld-risk/ && ./service.sh service start'

2.命令中java,最好用绝对路径

cmd = '/usr/local/jdk1.8.0_181/bin/java -jar {}/jacoco/lib/jacococli.jar dump --destfile {}-test.jacoco.exec'.format(settings.COVERAGE_HOME, os.path.join(self.service_dir, self.service_name))
原文地址:https://www.cnblogs.com/dannyyao/p/12259433.html