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

4 投票
3 回答
759 浏览
提问于 2025-04-16 16:00

我正在尝试通过Fabric来更改我的远程服务器的时区,代码是这样的:

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

但是这似乎没有效果。运行run("date")后,我得到的结果是:2011年4月19日 星期二 00:19:58 CDT,这并不是我刚设置的时区。

如果我直接登录到服务器,运行相同的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 个回答

1

这个只对当前的命令行有效。如果你关闭这个命令行,再打开一个新的,然后输入 date,你会发现时区(TZ)又回到了默认的设置。即使是在使用Fabric的时候,如果你捕捉到输出,你会看到时区确实被正确设置了,但当脚本结束时,命令行也结束了,所以TZ这个变量就不再可用了。

2

由于ikegami提到的环境原因,这两个单独的命令是无法正常工作的。不过,你可以通过下面的方式实现你想要的效果:

run("TZ=':Pacific/Auckland' date")
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")

撰写回答