【问题标题】:Run a process every alternate x hours每隔 x 小时运行一个进程
【发布时间】:2017-11-22 00:18:48
【问题描述】:

我有一个 python 脚本,如下所示:

python3 ./bin/abc.py --log_file ./web/prr.log

现在我需要确保上述进程每 3 小时运行一次。以下是流程:

  • 如果进程已经在运行,则终止进程并休眠 3 小时。
  • 休眠3小时后,如果进程没有运行,执行上述python命令重新启动进程,然后休眠3小时。
  • 重复上述过程。

所以意思是,我需要确保我的进程每隔 3 小时运行一次,所以我需要找到一种方法在每 3 小时后终止该进程。我想在这里使用watch 命令,但不确定如何在这里使用它。我正在使用 Ubuntu 14。

注意:我无法修改 python 脚本,所以我需要从外部进行。

【问题讨论】:

  • 您已经很好地描述了所需的步骤。每个部分都是一个有据可查的技术。你被困在哪里了?这一切都毫无疑问。
  • 我在这里一直使用watch 命令。我知道我可以在这里使用 watch 命令,但不确定如何在单个 watch 命令中制定所有上述步骤。

标签: python linux unix


【解决方案1】:

这似乎是crontab 的理想用例。我会编写 2 个通过 cron 每 3 小时运行一次的 bash 脚本。所以类似于以下内容:

#ScriptA.sh
ifProcessRunning
    KillProcess

#ScriptB.sh
ifProcessNotRunning
    StartProcess

#CronTab
0,6,12,18 * * * * ScriptA.sh
3,9,15,21 * * * * ScriptB.sh

要终止进程,您可以使用任何普通的 unix 命令,因此通过管道传递 ps aux 并在 shell 脚本中运行 kill 可以工作。

希望这会有所帮助——如果你想让我更充实,请发表评论!

【讨论】:

  • 我相信它可以在单个脚本或命令中完成。
  • 好的——也许你应该编辑你的原始问题,然后使用所有必需的参数。您是否对使用手表一无所知?这是家庭作业吗?还有哪些其他参数?
  • 这不太行。如果进程在 3 小时内自行完成,那么您需要立即开始另一个进程,而不是等待下一个 6n+3 边界。
  • 不,我并没有死心塌地使用watch。我正在阅读我们如何做这种事情,我看到有一个 watch 命令,但不能让它工作。因此,我对任何可以使这项工作发挥作用的事情持开放态度。不,这不是家庭作业。
  • 如果我正确解释了您的问题,那么更改此解决方案很容易:if ProcessRunning then kill process; else start process。将该脚本设置为每 3 小时运行一次。
【解决方案2】:

您可以创建一个 bash 脚本来检查 python 脚本是否正在运行。如果是,它将杀死脚本。如果没有,它将启动脚本。

#!/bin/bash
if pgrep -f <program name> > /dev/null
    then
         echo "Process is running. Killing"
         kill -9 $(pidof <program name>)
    else
         echo "Process is not running. Starting"
         python <location of the file>
    fi

【讨论】:

    猜你喜欢
    • 2016-09-29
    • 2016-01-27
    • 2017-05-08
    • 2016-11-10
    • 1970-01-01
    • 2020-07-27
    • 2018-10-17
    • 2013-03-03
    • 2019-11-04
    相关资源
    最近更新 更多