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

问题描述

| 我正在尝试通过Fabric更改远程服务器的时区,如下所示: 运行(\“导出TZ = \\\”:太平洋/奥克兰\\\“ \”) 运行(\“日期\”) 这似乎不起作用。
run(\"date\")
给我: TUE Apr 19 00:19:58 CDT 2011这不是我刚刚设定的时区。 如果我只是登录服务器并运行相同的bash命令,那么一切都将如期进行: [lazo @ lazoweb] $日期 2011年4月19日星期二00:20:00 [lazo @ lazoweb] $ export TZ = \“:太平洋/奥克兰\” [lazo @ lazoweb] $日期 星期二四月19 17:20:20 NZST 2011 谁能对此有所启发?我想念什么?

解决方法

run(\"export TZ=\\\":Pacific/Auckland\\\"\")
run(\"date\")
就好像
/bin/sh -c \'export TZ=\":Pacific/Auckland\"\'
/bin/sh -c \'date\'
您正在启动一个shell,设置它的环境变量之一,然后退出它。它从来没有机会将环境变量传递给任何人。 在脚本的环境中设置TZ,然后运行ѭ3。我不了解Python,但似乎
os.environ[\'TZ\'] = \":Pacific/Auckland\"
run(\"date\")
,由于ikegami解释了有关环境的原因,两个单独的命令将不起作用。但是,您可以通过以下方式实现您的期望:
run(\"TZ=\':Pacific/Auckland\' date\")
,这仅适用于当前shell。关闭外壳,启动新外壳并键入
date
,您将看到TZ已重置为默认时区。即使对于Fabric,如果您捕获了输出,您也会看到TimeZone的设置正确,但是随着脚本的结束,外壳也是如此,因此TZ变量不再可用。