我正在使用fabric远程启动微型aws服务器,安装git和git存储库,调整apache配置,然后重启服务器。
如果在任何时候,我从fabfile发出
sudo('service apache2 restart')
或run('sudo service apache2 restart')
或停止然后开始,命令显然运行,我收到指示apache已启动的响应,例如
[ec2-184-73-1-113.compute-1.amazonaws.com] sudo: service apache2 start
[ec2-184-73-1-113.compute-1.amazonaws.com] out: * Starting web server apache2
[ec2-184-73-1-113.compute-1.amazonaws.com] out: ...done.
[ec2-184-73-1-113.compute-1.amazonaws.com] out:
但是,如果我尝试连接,则拒绝连接,如果我进入服务器并运行
sudo service apache2 status
它说“Apache is NOT running
”
虽然被撞了,但如果跑了
sudo service apache start
,服务器已启动,我可以连接。还有其他人经历过这个吗?或者是否有人有任何关于我在哪里可以看到的提示,在日志文件等中找出已发生的事情。 apache2/error.log
,syslog
或auth.log
中没有任何内容。
这不是什么大不了的事,我可以解决它。我只是不喜欢这种无声的失败。
答案 0 :(得分:41)
您正在运行哪个版本的结构?
您是否尝试更改pty
参数(尝试更改shell
,但它不应影响事情)?
http://docs.fabfile.org/en/1.0.1/api/core/operations.html#fabric.operations.run
您可以像这样设置pty
参数:
sudo('service apache2 restart', pty=False)
答案 1 :(得分:14)
答案 2 :(得分:4)
当代表授予足够权限的用户(例如root)连接到您的遥控器时,您可以管理系统服务,如下所示:
from fabtools import service
service.restart('apache2')
https://fabtools.readthedocs.org/en/0.13.0/api/service.html
P.S。它需要安装fabtools
pip install fabtools
答案 3 :(得分:4)
这是this issue的一个实例,常见问题解答中有一个有pty答案的条目。不幸的是,CentOS 6不支持无pty sudo命令,我不喜欢nohup
解决方案,因为它杀死了输出。
问题的最后一个条目是使用sudo('set -m; service servicename start')
提及的。这将打开作业控制,因此后台进程将放入其自己的进程组中。因此,当命令结束时,它们不会被终止。
答案 4 :(得分:0)
还有很多方法可以解决这个问题。
您可以使用--no-pty选项
运行fab目标fab --no-pty <task>
在fabfile中,在目标代码执行之前将全局环境变量always_use_pty设置为False
env.always_use_pty = False
答案 5 :(得分:0)
使用pty = False仍然没有为我解决。最终为我工作的解决方案是做一个双重nohup,就像这样:
<强> run.sh 强>
#! /usr/bin/env bash
nohup java -jar myapp.jar 2>&1 &
<强> fabfile.py 强>
...
sudo("nohup ./run.sh &> nohup.out", user=env.user, warn_only=True)
...