2011-04-19 40 views
4

我試圖通過光纖來改變我的遠程服務器的時區,像這樣:如何通過Fabric設置遠程服務器TimeZone?

 
run("export TZ=\":Pacific/Auckland\"") 
run("date") 

這似乎並沒有工作。 run("date")給我: 4月19日星期二00:19:58 CDT 2011這不是我剛剛設置的時區。

如果我登錄到服務器並運行相同的bash命令的AS預期的一切都只是:

 
[[email protected]]$ date 
Tue Apr 19 00:20:00 CDT 2011 
[[email protected]]$ export TZ=":Pacific/Auckland" 
[[email protected]]$ date 
Tue Apr 19 17:20:20 NZST 2011 

任何人都可以闡明這一些輕?我錯過了什麼?

回答

4
run("export TZ=\":Pacific/Auckland\"") 
run("date") 

就像

/bin/sh -c 'export TZ=":Pacific/Auckland"' 
/bin/sh -c 'date' 

您推出了一個殼,其設置環境變量之一,然後退出它。它從來沒有機會將該環境變量傳遞給任何人。

在腳本環境中設置TZ,然後運行date。我不知道Python,但它似乎是

os.environ['TZ'] = ":Pacific/Auckland" 
run("date") 
+0

謝謝,設置'os.environ'在腳本中沒有很好的工作..仍然在工作。但是,謝謝你指出我正確的方向。 – lazo 2011-04-19 11:26:28

+1

@lazo,使用Perl的概念證明:'perl -e'local $ ENV {TZ} =「:Pacific/Auckland」;系統(「日期」)''打印'Wed Apr 20 03:03:12 NZST 2011' – ikegami 2011-04-19 15:04:28

1

這隻適用於當前shell。關閉外殼,啓動一個新的並輸入date,您將看到TZ已重置爲默認時區。即使對於Fabric來說,如果捕獲輸出,你也會發現TimeZone的設置是正確的,但是當腳本結束時,shell也是如此,因此TZ變量不再可用。

2

由於ikegami解釋有關環境的原因,兩個單獨的命令將不起作用。然而,你可以實現你想要的東西:

run("TZ=':Pacific/Auckland' date") 
相關問題