睡眠资源利用率

问题描述

我要解决的问题如下。我有一个长时间运行的任务(1到2个小时),每天必须运行。所以goto选项是cron。但是要注意的是,我必须在连续运行之间留出24小时的间隔。因此,现在使用cron将涉及在每次运行后重写cron作业文件。在此示例之后,这可能会很清楚。

长期运行的作业“ LR”在周一的下午6点开始,并在当天的7:30 PM结束。 周二应该从晚上7:30开始,而不是下午6点开始(就像星期一一样)。这是因为连续运行之间必须有24小时的间隔。

最明显的选择是让进程运行无限循环。开始LR工作。然后睡眠24小时,然后继续循环。这也完美。在我的设置中,有一个bash脚本正在运行此循环。

while [ 1 == 1 ]; do
    /bin/jobs/long_run.py
    /bin/jobs/cleanup.sh
    sleep 86400
done

所以我的问题是,花费的CPU资源总量是多少,RAM使用率是多少。 不确定这是否会影响答案;我在android手机上的termux上运行它。 另外,请推荐其他重量轻的选项。

解决方法

没有什么担心资源的,而脚本执行sleep时,它确实处于休眠状态。您应该担心两次执行之间是否发生任何事情,例如重启,停机等。这种结构:

while true; do
    sh script.sh
    sleep 86400
done

不会继续,您也不会在任何地方节省下次执行的时间。与这种结构类似,有一个包装,假设f()是您的工作

f() {
    echo working
}

wrapper() {
    f
    echo sleeping
    sleep 86400
    wrapper
}

wrapper

所以现在您调用包装器,该包装器可以工作,休眠并自行调用。您可以使用此方法,如果您确定可能会出现问题,请至少在某处打印日期时间。

您可以使用cronat将内部睡眠和包装器调用替换为作业调度。 at可能不是所有发行版的标准数据包(至少不是我的发行版)。您可以安装它。对于cron,包装程序将如下所示:

at

使用wrapper() { f at now +1 day wrapper } ,您可以编辑crontab,例如this,但最好使用crontab文件,例如this,您要做的就是解析cron命令,创建日期前缀,更新crontab。

注意:对于用户,可能还有其他cron作业,现有的或已添加的,然后在最后一个链接中考虑。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...