织物似乎启动了 apache2 但没有

Posted

技术标签:

【中文标题】织物似乎启动了 apache2 但没有【英文标题】:fabric appears to start apache2 but doesn't 【发布时间】:2011-09-16 19:02:56 【问题描述】:

我正在使用fabric远程启动micro 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: 

但是,如果我尝试连接,则连接被拒绝,如果我 ssh 进入服务器并运行 sudo service apache2 status 它说“Apache is NOT running

在 sshed 时,如果运行 sudo service apache start,服务器已启动,我可以连接了。有没有其他人经历过这个?或者是否有人对我可以查看的位置、日志文件等有任何提示,以了解发生了什么。 apache2/error.logsyslogauth.log 中没有任何内容。

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

【问题讨论】:

这根本没有帮助,但我已经看到与 memcached 完全相同的行为 【参考方案1】:

当代表授予足够权限的用户(例如 root)连接到您的遥控器时,您可以管理系统服务,如下所示:

from fabtools import service

service.restart('apache2')

https://fabtools.readthedocs.org/en/0.13.0/api/service.html

附:它需要安装 fabtools

pip install fabtools

【讨论】:

澄清一下,需要一个额外但有用的依赖:'fabtools' -> pip install fabtools 感谢@chishaku,我添加它是为了避免更多人感到困惑。【参考方案2】:

这是this issue 的一个实例,FAQ 中有一个条目包含 pty 答案。不幸的是,在 CentOS 6 上不支持 pty-less sudo 命令,我不喜欢 nohup 解决方案,因为它会杀死输出。

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

【讨论】:

【参考方案3】:

使用 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)
...

【讨论】:

【参考方案4】:

您正在运行哪个版本的面料?

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

http://docs.fabfile.org/en/1.0.1/api/core/operations.html#fabric.operations.run

您可以像这样设置pty 参数:

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

【讨论】:

我在 OSX 10.6.7 上运行 1.0.1 版的结构。我也会玩 pty 和 shell。我也会尝试 combine_stderr,也许我会得到更多反馈。 这为我解决了这个确切的问题。 这个问题也解决了,但是谁能解释它为什么起作用?似乎 SIGHUP 正在发送到所有子进程,即使它们应该与 shell 分离。 这并没有解决我的问题——它导致结构挂起,会话打开到远程服务器。我不得不通过 ssh 进入服务器并终止进程以终止结构。而且它仍然不允许我将进程 nohup 到后台。【参考方案5】:

解决问题的更多方法。

您可以使用 --no-pty 选项运行 fab 目标

fab --no-pty <task>

在 fabfile 中,在目标代码执行之前,将全局环境变量 always_use_pty 设置为 False

env.always_use_pty = False

【讨论】:

【参考方案6】:

试试这个:

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

遇到the same problem 后,这对我有用。我不确定为什么会这样。

【讨论】:

如果您在 EC2 实例上工作并在应用此修复后获得err: stdin: is not a tty,您可能会在此处找到解决方案:blog.markfeeney.com/2009/12/… 在 ec2 实例中工作。

以上是关于织物似乎启动了 apache2 但没有的主要内容,如果未能解决你的问题,请参考以下文章

apache无法启动,提示是“windows无法在本地启动apache2.2。。。”

OSX 服务器:apache2 正在运行,但“加载页面有问题”

使用 Grok for Logstash 解析 Apache2 错误日志

安装成功但无法在我的 Windows 7 系统上启动 apache 2.4

DirectoryIndex 似乎被 apache2 忽略了

OpenSSL 错误阻止 Apache2.2 在 win32 上启动