如何在tmux终端中定时运行Python脚本?

3
我有一个Python脚本,或者说是一个Python服务,需要每天下午3点运行。基本上,文件的结尾是一个while True : time.sleep(1)。
我绝对需要在终端窗口中执行此脚本(因为我需要日志记录)。如果解决方案可以在tmux窗口中运行,则更好。
我尝试过cron jobs,但不知道如何将其放入终端。

你需要实时终端日志吗?或者仅将日志写入日志文件,就像存储您的终端输出的版本一样,这样可以吗?如果可以的话,我可以向您展示一个使用cron作业的解决方案,这可能是我解决此问题的方法。 - njachowski
我们同时记录到标准输出和文件中,但这是两个不同的日志格式化程序,具有不同的规则。在终端中跟踪文件并获取我们想要的内容并不容易。所以,是的,我们基本上需要实时终端解决方案。 我仍然对您的解决方案感兴趣,谢谢 :) - user1800356
4个回答

1
感谢所有答案。我使用了一个带有Bash脚本的cron作业来进行TMUX脚本编写。
类似这样的:
#!/bin/bash
tmux new-session -d -s example
tmux split-window -h
tmux select-pane -t 0
tmux send-keys './ex.sh' 'C-m'
tmux select-pane -t 1
tmux send-keys './ex1.sh'
tmux new-window -n 'a'
tmux send-keys 'cd a' 'C-m'
tmux select-window -t "example:0"
tmux select-pane -t 0
tmux -2 attach-session -t example

1
我建议使用cron并使用tee命令记录结果。您的crontab应该如下所示:
0 15 * * *     python yourScript.py | tee –a logFile.txt

1

好的,我明白你的意思。我过去也做过类似的事情。

要让cron在下午3点运行您的脚本并将其附加到日志文件中,您可以简单地这样做:

0 15 * * * command >> log # 只记录标准输出

或者

0 15 * * * command &>> log # 记录标准输出和错误输出

如果您想在终端中查看它,我可以想到两种可能性:

  • 像您说的那样,您可以执行一个while true循环,每n秒检查一次时间,并在下午3点时执行某些操作。

  • 或者,您可以设置一个始终处于开启状态的API端点,并通过其他程序在下午3点触发它。例如,可以通过cron触发它。

个人而言,我还喜欢使用tmuxscreen来登录并查看发生了什么,而不仅仅是检查日志文件。所以我希望您能找到适合您用例的可行解决方案!


0
如上所述,将输出重定向到文件的 cronjob 可能是最简单的方法,但如果不可能,您想要保持进程运行,可以设置超时时间直到明天下午3点。
h_exec = 15
t_hour = 60 * 60
t_day = 24 * t_hour
t_now = time.time()
t_timeout = math.floor((t_now + ((24 - h_exec) * t_hour)) / t_day) * t_day + (h_exec * t_hour) - t_now

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接