Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh fabric似乎启动了apache2,但没有';T_Ssh_Ubuntu 10.04_Python 2.6_Fabric_Apache2.2 - Fatal编程技术网

Ssh fabric似乎启动了apache2,但没有';T

Ssh fabric似乎启动了apache2,但没有';T,ssh,ubuntu-10.04,python-2.6,fabric,apache2.2,Ssh,Ubuntu 10.04,Python 2.6,Fabric,Apache2.2,我正在使用fabric远程启动micro aws服务器,安装git和git存储库,调整apache配置,然后重新启动服务器 如果在任何时候,从FABI发布的文件 sudo('service apache2 restart')或run('sudo service apache2 restart')或先停止后启动,命令显然会运行,例如,我收到指示apache已启动的响应 [ec2-184-73-1-113.compute-1.amazonaws.com] sudo: service apache2

我正在使用fabric远程启动micro aws服务器,安装git和git存储库,调整apache配置,然后重新启动服务器

如果在任何时候,从FABI发布的文件

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: 
但是,如果我尝试连接,连接将被拒绝,如果我使用ssh连接到服务器并运行
sudo服务apache2状态
它说“
Apache没有运行

如果运行,则在sshed中运行
sudo服务apache start
,服务器已启动,我可以连接。还有其他人经历过吗?或者是否有人有任何提示,我可以在哪里寻找,在日志文件等,以了解发生了什么。
apache2/error.log
syslog
auth.log
中没有任何内容


没什么大不了的,我可以解决。我只是不喜欢这种无声的失败。

您正在运行哪个版本的fabric

您是否尝试更改
pty
参数(也尝试更改
shell
,但它不应影响事情)

您可以如下设置
pty
参数:

sudo('service apache2 restart', pty=False)
试试这个:

sudo('service apache2 restart',pty=False)

这对我来说很管用。我不知道为什么会发生这种情况。

还有两种方法可以解决这个问题

  • 您可以在没有pty选项的情况下运行fab target

    fab --no-pty <task>
    

当代表被授予足够权限(如root)的用户连接到远程设备时,您可以管理系统服务,如下所示:

from fabtools import service

service.restart('apache2')

p.S.Its要求安装fabtools


pip安装fabtools

使用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)
...
这是的一个实例,FAQ中有一个条目有pty答案。不幸的是,CentOS 6不支持pty-less sudo命令,我不喜欢
nohup
解决方案,因为它扼杀了输出


本期的最后一项提到使用
sudo('set-m;service servicename start')
。这将打开作业控制,因此后台进程被放在它们自己的进程组中。因此,它们不会在命令结束时终止

我正在OSX 10.6.7上运行fabric的1.0.1版。我也会和pty和shell一起玩。我也会尝试combine_stderr,也许我会得到更多的反馈。这为我解决了这个确切的问题。这个问题也解决了,但有人能解释为什么它有效吗?SIGHUP似乎被发送到所有子进程,即使它们应该从shell中分离。这并没有解决我的问题——它导致结构挂起,会话打开到远程服务器。我必须通过ssh连接到服务器并终止进程来终止结构。它仍然不允许我在后台处理进程。这一点也没有帮助,但我已经看到了Memcached的完全相同的行为。如果您在EC2实例上工作,并且得到
err:stdin:不是tty
,应用此修复后,您可以在这里找到解决方案:在EC2实例中工作。只是为了澄清,需要一个额外但有用的依赖性:“fabtools”->pip install FabToolsTanks@chishaku,我添加它是为了避免更多人感到困惑。
...
sudo("nohup ./run.sh &> nohup.out", user=env.user, warn_only=True)
...