【问题标题】:how to execute python script every 1556 seconds如何每1556秒执行一次python脚本
【发布时间】:2020-05-18 03:39:39
【问题描述】:

我有一个 python 脚本,我想在每 1556 秒后执行一次。

我如何在几分钟内运行它,即如果我想每 5 分钟运行一次,那么我可以这样做:

*/5 * * * * /path/to/script/script.py

如何将其设置为在每个 1556 seconds 之后运行?

谢谢

【问题讨论】:

  • 1536 还是 1556?你写了两个不同的东西
  • 距离上次启动 1536 秒,还是距离上次结束 1536 秒?
  • 抱歉是一种类型...它应该每 1556 秒运行一次
  • 您可以在脚本中加入 56 秒的睡眠,并使用 cron 每 25 分钟运行一次

标签: linux bash cron


【解决方案1】:

1556 秒大约是每 26 分钟一次,因此您可以将 cronjob 设置为:

*/26 * * * *

您在分钟的说明符中有 */26 - 这意味着每分钟但步长为 26(换句话说,每 At 每 26 分钟)。由于 cron 不会达到亚分钟级的分辨率,因此您需要找到另一种方法。

如果您想每 1556 秒执行一次所需的字面意思

*/25 * * * *  sleep 56 && python3 /path/to/script/script.py

另外,您可以在循环中运行您的重复任务,它应该可以满足您的需要:

#!/bin/env bash
while [ true ]; do
 sleep 1556
 # do what you need to here
done

【讨论】:

  • */25 是否仅在 00, 25, 50 上运行?
  • 这个答案误解了 crontab 行的解释方式。 */26 并不意味着“每 26 分钟运行一次此作业”。它的意思是“在几分钟内运行这个工作,是 26 的倍数”。所以它会在 01:00, 01:26, 01:52, 02:00, 02:26, 00:52 等时间运行。每个作业的开始时间不会改变下一个作业的开始时间,所以sleep 56 的唯一作用是将开始时间延迟 56 秒,以便第二个将在 01:00:56、01:25:56、01:50:56 等运行。
  • 另外,while [ true ]; 也可以,但不是你想的那样。它不执行true 命令。 [ 是被执行的test 命令; true 是它的参数,它是未评估的; [ true ] 成功,因为带有一个参数的测试命令恰好在一个参数不为空时成功。我怀疑你要找的是while true; do ...,它每次都会执行true。一个常见的习惯用法是while :; do,因为: 是一个始终成功的无操作内置函数。 whilecommand 之前,只要命令成功就会继续。
  • 您在 bash 中使用 :true 内置函数 while true 是对的(或破折号或 zsh ),所以我意识到不需要 [ ] 字符。
  • @MahmoudOdeh:我对 cron 解释 */26 的方式也是正确的。 TIAS。
【解决方案2】:

1556 秒,这是一个奇怪的数字...

我建议使用带有 ETA 的 celery https://docs.celeryproject.org/en/stable/userguide/workers.html#dump-of-scheduled-eta-tasks

记住... “这些是带有 ETA/倒计时参数的任务,而不是周期性任务。”

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2016-07-24
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多