cron - 每 1 天 10 秒运行一次 cron?
问题描述
是否可以每 86410 秒或仅每 1 天 10 秒运行一次 cron?
我有一项服务,从被调用的那一刻起需要 24 小时来处理数据!现在,我需要确保我给服务足够的时间来处理数据,所以我需要每 24 小时和几秒调用一次服务,而不是每 24 小时调用一次服务!
可以使用cron吗?
解决方案
我认为有趣的是,如果您确实想每 86410 秒重新启动一次处理,那么您的服务开始时间会在几天后,每次都在以后漂移 - 所以如果您最初安排您的过程在 08:00 开始,大约一年后,它将从 09:00 开始,大约 23.6 年后,它将昼夜不停地在早上 8 点重新开始。
Cron 绝对不是为这种事情设计的 :-)
但是,如果您在最近的 Linux 操作系统上运行,您可以使用 SystemD 计时器单元来执行此操作。您可能熟悉 SystemD 服务单元 - 因为这是您为现代 Linux 编写服务的方式,但 SystemD 可以做的更多,其中之一就是安排需要有趣的时间表的事情。
假设您将处理作业作为 SystemD 服务运行,它可能看起来像这样:
/etc/systemd/system/data-processing.service
[Unit]
Description=Process some data
[Service]
Type=simple # its the default, but I thought I'd be explicit
ExecStart=/usr/bin/my-data-processor
然后,您可以非常简单地设置一个计时器单元以每 86410 秒启动一次此服务 -/etc/systemd/system/data-processing.timer
使用以下内容创建一个计时器单元文件:
[Unit]
Description=start processing every day and 10 seconds
[Timer]
OnBootSec=0 # Start immediately after bootup
# Start the next processing 86410 seconds after the last start
OnUnitActive=86410
AccuracySec=1 # change from the default of 60, otherwise
# the service might start 86460 after the last start
[Install]
WantedBy=timers.target
然后只需启用并启动计时器单元 - 但不是服务。如果服务已启用,您可能还想禁用它 - 计时器将根据需要负责运行它。
systemctl daemon-reload
systemctl enable data-processing.timer
systemctl start data-processing.timer
再看一遍,您提到要在上一次运行完成后开始下一次运行服务。如果完成处理的时间不正好是 86400 秒,会发生什么?如果我们将要求更改为“在完成运行后重新启动数据处理服务,但先让其冷却 10 秒”,那么您根本不需要计时器 - 您只需要让 SystemD 重新启动服务后10秒冷却,无论何时完成。
我们可以改变上面的服务单元来做到这一点:
[Unit]
Description=Process some data
[Service]
Type=simple
ExecStart=/usr/bin/my-data-processor
Restart=always
RestartSec=10
推荐阅读
- r - R:如何在圆形布局中手动设置ggraph中节点的位置?
- python - 在 2D NumPy 数组上设置值
- wordpress - 如何以指定大小以编程方式将图像上传到 WordPress
- firebase - 为什么同一用户在另一台设备上登录后,firebase verifyIdToken 在一台设备上失败?
- c - 卡在将玩家放在棋盘上
- ios - 使用 Snapkit 以编程方式创建 ScrollView
- asp.net-core - 在 Swagger 中为不同的页面/版本添加不同的安全定义
- python - 如何从python中的基本函数返回类对象
- ruby-on-rails - 如果每条记录为零,Rails 会更新多条记录
- python-3.x - Apache Zeppelin python到角度绑定不会一直发生,取消绑定会出错