2011-06-16 39 views
24

我使用的面料來遠程啓動微AWS服務器,安裝Git和一個Git倉庫,調整Apache的配置,然後重新啓動服務器。面料出現啓動Apache2但不

如果在任何時候,從fabfile我發出任何

sudo('service apache2 restart')run('sudo service apache2 restart')或停止,然後啓動,命令顯然跑,我得說明阿帕奇響應已經啓動,例如

[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

同時,如果運行 sudo service apache start,服務器已啓動,我可以連接。有沒有其他人經歷過這個?或者有沒有人有任何提示,我可以看看,在日誌文件等,以瞭解發生了什麼。 apache2/error.log,syslogauth.log中沒有任何內容。

這不是什麼大不了的事,我可以工作輪它。我只是不喜歡這種沉默的失敗。

+0

不是說這有助於所有,但我已經看到了與memcached相同的行爲 – 2011-06-16 23:16:28

回答

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) 
+0

我正在OSX 10.6.7上運行Fabric 1.0.1版本。我也會玩pty和shell。我也會嘗試combine_stderr,也許我會得到更多的反饋。 – Dan 2011-06-16 23:10:25

+1

這爲我解決了這個確切的問題。 – Bialecki 2011-07-13 19:23:19

+0

這個問題也解決了,但任何人都可以解釋它爲什麼有效嗎?看起來SIGHUP正在發送給所有子進程,即使它們應該從shell中分離出來。 – Charles 2013-11-08 21:26:07

14

試試這個:

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

此運行到the same problem後爲我工作。我不知道爲什麼會發生這種情況。

+0

感謝rupello已經完成了技巧 – Dan 2011-06-19 19:12:47

+0

如果你在EC2實例上工作,在應用此修復後得到'err:stdin:不是tty',你可以在這裏找到解決方案:http://blog.markfeeney.com /2009/12/ec2-fabric-and-err-stdin-is-not-tty.html – AJJ 2012-03-02 08:44:19

+0

曾在ec2實例中工作過。 – 2012-04-05 17:09:20

0

夫婦的更多的方式來解決這個問題。

  • 您可以用--no-PTY選項

    fab --no-pty <task> 
    
  • 內fabfile,全球環境變量always_use_pty設置爲False運行工廠的目標,你的目標代碼執行

    env.always_use_pty = False 
    
4

當連接到您的遙控器代表授予足夠的權限(例如root)用戶,可以爲人年齡的系統服務,如下圖所示:

from fabtools import service 

service.restart('apache2') 

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

附:它需要fabtools

pip install fabtools

+1

只是爲了澄清,需要一個額外的但有用的依賴:'fabtools' - >點安裝fabtools – chishaku 2015-01-19 20:56:23

+0

謝謝@chishaku,我已經添加它,以避免更多的人感到困惑。 – 2015-01-20 10:01:33

0

使用PTY =假依然沒有解決這個問題,我的安裝。這結束了對我的工作的解決方案做了雙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

這是一個實例this issue,並且在FAQ中有一個條目,它有pty答案。不幸的是,在CentOS 6上不支持pty-less sudo命令,我不喜歡nohup解決方案,因爲它殺死了輸出。

該問題的最後一項提到使用sudo('set -m; service servicename start')。這會打開作業控制,因此後臺進程將放入其自己的進程組中。因此,當命令結束時它們不會被終止。