【问题标题】:how reliable is "at"“at”有多可靠
【发布时间】:2015-03-31 18:49:46
【问题描述】:

我正在开发一个命令行调度程序,因为我需要在不同时间依次运行多个命令。

public static function set ($dir, $operation, $arguments = [], $options = [], $timeToWait)
{

    $argumentstring = '';
    $optionstring = '';

    foreach($arguments as $argument)
    {
        $argumentstring .= $argument.' ';
    }

    if ($options) 
    {
        foreach ($options as $key => $option) 
        {
            $optionstring .= '--' . $key . '=\"' . $option . '\" ';
        }
    }

    $command = $operation. ' ' . $argumentstring . ' ' . $optionstring;
    return $string = exec('echo php '.$dir.'/./prices '.$command.' | /usr/bin/at -M now + '.$timeToWait. ' min');
}

像这样称呼

Schedule::set(getcwd(), 'put:acknowledge', ['Customer' => database_connector::getUserId(), 'ReportId' => ReportIdDeclaration::getReportID(), [], 5);

首先,cron 运行第一个进程,然后根据 API 响应调度其他命令。我必须每两分钟运行一次这些命令,所以cron 和at 也经常被解雇。虽然我知道 cron 正在工作(并且文件中的命令在手动调用时按预期工作),但某些作业失败/未执行。

由于我没有与at 合作过这么多的工作,我怀疑at 是否像我需要的那样可靠。或者我的代码缺少我看不到的东西。

这就是我的问题的重点,at 在大量工作中是否被认为是可靠的,我是否必须控制我的源代码的错误,或者at 只是不被认为是可靠的足以在纯程序化执行的环境中工作?

【问题讨论】:

    标签: php cron command-line-interface at-job


    【解决方案1】:

    我们不知道您需要“at”有多可靠,但是您所描述的似乎是使用 at 的一种反模式。

    如果您需要按顺序运行作业,则应将它们链接在具有单个入口点的脚本中。

    虽然“at”通常会以 1 秒的精度运行任务,但不能保证该任务将始终在计划的 1 秒内运行。如果您需要这种程度的确定性,那么您需要一个实时操作系统。

    如果负载超过某个阈值,某些版本的“cron”和“at”将不会启动作业。除了那种情况,我从来不知道 'at' 会接受不是(最终)由 atd 运行的工作。

    当然,最近的系统可能不使用 atd 和 crond - systemd 支持此功能(是否有效以及是否是一个好主意是一个很长的争论)。

    您在此处向我们展示的代码不会检查调用“at”的返回码。

    【讨论】:

    • 谢谢,这听起来很合理。单个入口点是我考虑很长时间的事情,但我找不到有效的方法,因为第二个脚本有时需要在第一个脚本后 5 有时 10 分钟启动。你有什么好主意可以帮助我吗?
    • 就此而言,您并不需要at。您只需要计算时间差异,直到该工作再次开始,以及该时间长度的sleep()。例如。 cron 在第一次运行时启动作业,它执行 15 分 3 秒,并且应该在初始运行后 30 分钟再次启动,所以你会睡 14 分 57 秒。
    • @Marc B:运行一个守护进程并不是那么简单。您还应该 fork、关闭 stdio 和 setsid,更不用说添加信号处理程序了。
    • @MarcB 我有数百个这样的作业正在运行,不会让作业休眠浪费很多内存,还是 php 处理得很好?
    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2011-04-23
    • 2020-07-18
    • 2011-04-03
    相关资源
    最近更新 更多