如果时间与另一个时区的时间匹配,如何 运行 一个脚本

How to run a scrip if the time is matched with a time in another time zones

目前,我正在使用云 VM 来 运行 我的代码,因此我被分配了一个位于不同时区的新 VM。我想 运行 一个 bash 脚本 运行 一个 python 脚本 7:30 下午(东部时间)。从 here I know how to run a bash script at a specific time, e.g., echo "ls -l" | at 07:00. From here I know how to get the current time of Eastern time, e.g., TZ=America/New_York date. Also, from here 我知道如何使用 date +%R.

只获取时间

我是一名 Python 编码员,并尽我最大努力编写了一个 sudo 代码,显示了我作为 bash 脚本想要完成的工作:

while true
do
Now=TZ=America/New_York date +%R
if [Now -eq 7:30pm] 
then
python3 myfile.py
done

你已经知道如何设置at命令来执行命令 在指定的时间,以及如何将 EST 转换为本地时间, 你可以将它们组合起来:

echo "python3 myfile.py" | at $(date -d "19:30 EST" +%R)

当你调用at命令时,它总是警告 “将使用 /bin/sh 执行命令”。如果我们调用 bash 特定命令,例如:

echo "shopt -s globstar; ls **" | at ..

这会失败。

在我们的例子中,命令 python3 myfile.py 将 运行 与 /bin/sh/bin/bash 那么你不用担心警告。

date -d STRINGSTRING 解释为 date/time 表示 并以指定格式 +%R.

打印转换后的 date/time

如果你想将输出发送到一个文件,你可以说:

echo "python3 myfile.py > /path/to/a/file" | at $(date -d "19:30 EST" +%R)

要输出到当前终端,首先要识别终端 使用 tty 命令:

$ tty
=> /dev/pts/0

然后将输出重定向到终端:

echo "python3 myfile.py > /dev/pts/0" | at $(date -d "19:30 EST" +%R)