2011-04-19 42 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") 
相关问题