是否可以每86410秒或仅每1天10秒运行一次cron?
我有一项服务,从被调用开始,它需要24小时来处理数据!现在,我需要确保给该服务足够的时间来处理数据,因此,与其每隔24小时调用一次服务,不如每24小时零几秒钟调用一次服务!
可以使用cron吗?
答案 0 :(得分:0)
我认为有趣的是,如果您确实希望每86410秒重新启动一次处理,那么您的服务启动时间将随着时间的推移而漂移,并且每次都会越来越晚-因此,如果您最初将流程计划为从08开始:00,大约一年后,它将从09:00开始,大约23.6年后,它将全天候在上午8点重新开始。
Cron绝对不是为这种事情设计的:-)
但是,如果您在最新的Linux OS上运行,则可以使用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