如何通过Fabric设置远程服务器TimeZone?

时间:2011-04-19 05:39:16

标签: python bash fabric

我正在尝试通过Fabric更改我的远程服务器的时区,如下所示:

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

这似乎不起作用。 run("date")给了我: Tue Apr 19 00:19:58 CDT 2011 这不是我刚刚设定的时区。

如果我只是登录服务器并运行相同的bash命令,那么一切都和预期的一样:

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

有人可以对此有所了解吗?我错过了什么?

3 个答案:

答案 0 :(得分:4)

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

就像

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

您正在启动一个shell,设置其中一个环境变量,然后退出它。它从来没有机会将环境变量传递给任何人。

在脚本环境中设置TZ,然后运行date。我不懂Python,但似乎是

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

答案 1 :(得分:2)

由于ikegami解释环境的原因,两个单独的命令将不起作用。但是,您可以实现您的目标:

run("TZ=':Pacific/Auckland' date")

答案 2 :(得分:1)

这仅适用于当前的shell。关闭shell,启动一个新shell并键入date,您将看到TZ已重置为默认时区。即使对于Fabric,如果你捕获输出,你会看到TimeZone确实设置正确,但是当脚本结束时,shell也是如此,因此TZ变量不再可用。