用 fabric 执行 shell 脚本遇到的问题

2015-03-28 11:09:25 +08:00
 hayao650
是这样的,我有多台机器,每台机器上有一个服务起停shell脚本,我在服务器上用fabric,ssh到各个机器,执行这个shell脚本,从fabric的输出来看,脚本是执行成功了,但是当我手动ssh到各个机器上查看服务进程的时候,服务并不存在,请问大家有没有遇到过这种问题,或者知道怎么解决么?
3596 次点击
所在节点    Python
8 条回复
zeayes
2015-03-28 11:44:28 +08:00
因为你ssh断开的时候,程序也挂了。
可以查下 nohup 和 &。
进程服务管理,推荐用supervisord。
hayao650
2015-03-28 12:36:30 +08:00
@zeayes nohup和&都试过了,一样不起作用,supervisord没有用过,准备去学习下,刚才发现有人遇到相同的问题,说是fabric过早的结束了ssh的session,加一个sleep可以解决这个问题,还没有试过,准备试一下。
lgh
2015-03-28 13:00:26 +08:00
我之前是在 run() 方法里加 pty=False 参数解决的,没有加延迟和 nohup
dreampuf
2015-03-28 13:31:23 +08:00
nohup 之后 记得 sleep 0.1,因为你的nohup本身没bootstrap完,ssh session就结束了
hayao650
2015-04-08 21:22:48 +08:00
@lgh 我在run函数中加上了这个参数,但是在fab运行完之后,手动ssh到该机器,ps能够查看到该进程,但是该进程的父进程是1,该进程变成了孤儿进程,而且不能正常运行,请问你遇到过这种情况么?
hayao650
2015-04-08 21:24:47 +08:00
@dreampuf sleep 0.1是单独写在一个run里面,还是与nohup在同一个run里面,今天我试了一下,在同一个run里面,fab执行完之后,进程还是孤儿进程,而且不能正常运行,手动启动此进程就可以正常工作!
dreampuf
2015-04-08 23:44:52 +08:00
@hayao650 nohup 之后,你已经回答你自己啦
lgh
2015-04-08 23:47:23 +08:00
@hayao650 我之前的是通过 run() 去执行启动 JBoss 实例的命令,加了 pty=False 之后就正常了,没有你说的这种情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/179883

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX