是否可以每86410秒运行一次cron,或者每1天10秒运行一次cron?
我有一个服务,从它被调用的那一刻起,它需要24小时来处理数据!现在,我需要确保我给服务足够的时间来处理数据,所以我需要每24小时几秒调用一次服务,而不是每24小时调用一次服务!
可以使用cron吗?
发布于 2018-11-30 21:20:30
我认为值得注意的是,如果您确实希望每隔86410秒重新启动一次处理,那么您的服务启动时间将一天一次地延迟-因此,如果您最初将您的进程安排在08:00开始,大约一年后它将在09:00开始,而在大约23.6年之后,它将在上午8:00重新启动。
Cron绝对不是为这种事情设计的:-)
但是,如果您运行的是最新的Linux操作系统,则可以使用SystemD计时器单元来执行此操作。您可能熟悉SystemD服务单元-因为这是为现代Linuxes编写服务的方式,但是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=10https://stackoverflow.com/questions/52980848
复制相似问题