cron 的替代品

cron 的替代品

我对 Linux 上的 cron 不满意。

  • 负载峰值:@hourly 作业会产生负载峰值。我想要一个随机偏移量(每个作业)。
  • 高负载:跳过一些作业:如果负载太高,我想跳过一些作业。

我可以使用 shell 脚本包装器来解决这个问题,但是这很“肮脏”。

到目前为止,我使用默认的 vixie cron。

您如何解决这个问题?有没有 vixie cron 的替代品?

答案1

看一眼克隆

当然,为了使其真正有用,每次系统停止时都会保存到下次执行的剩余时间。您还可以这样写:

在凌晨 2 点到 5 点之间运行一次该命令,如果系统在此时间间隔内的任何时间运行,则将执行该命令。

Fcron 还包含一个实用的选项系统,可以将其应用于声明后的每一行或单行。一些受支持的选项允许:

  • 逐个运行作业(fcrontab 选项 serial),
  • 设置作业应运行的最大系统负载平均值(fcrontab 选项 lavg),
  • 为作业设置一个好值(fcrontab 选项很好),
  • 如果作业应该在系统停机期间运行,则在 fcron 启动时运行它们(fcrontab 选项 bootrun),

答案2

您需要的很简单。将您的作业保留在 @Hourly 中,但不要调用直接命令,而是使用包含以下函数的 bash 包装器:

#! /bin/bash

# Random wait function
RANDOMWAIT=60
random_wait() {
  sleep $(( $RANDOM % ($RANDOMWAIT * 60) + 1 ))
}

run_job() {
  your-cron-command-here
}

random_wait
run_job

这将延迟执行一段时间(从 1 分钟到 60 分钟)。将 RANDOMWAIT 更改为更高的值以获得更大的范围。($RANDOM 是 Linux 上的特殊 shell 变量,并且始终是随机整数)

这正是您所描述的原因,这是一种常见的做法。我yum-cron实际上是从包的 cron 脚本中获取此代码示例的(位于/etc/cron.daily

答案3

根据你正在做的事情,后台作业排队系统会像救援工作?

答案4

Vixie Cron 支持抖动,参见此处(1)
至于根据负载跳过,您将需要对此进行破解,我不知道有任何类似 cron 的工具可以做到这一点。

相关内容