如何解决睡眠资源利用率
我要解决的问题如下。我有一个长时间运行的任务(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
所以现在您调用包装器,该包装器可以工作,休眠并自行调用。您可以使用此方法,如果您确定可能会出现问题,请至少在某处打印日期时间。
您可以使用cron
或at
将内部睡眠和包装器调用替换为作业调度。 at
可能不是所有发行版的标准数据包(至少不是我的发行版)。您可以安装它。对于cron
,包装程序将如下所示:
at
使用wrapper() {
f
at now +1 day wrapper
}
,您可以编辑crontab,例如this,但最好使用crontab文件,例如this,您要做的就是解析cron
命令,创建日期前缀,更新crontab。
注意:对于用户,可能还有其他cron作业,现有的或已添加的,然后在最后一个链接中考虑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。