“at”有多可靠

时间:2015-02-01 20:12:47

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

我正在使用命令行调度程序,因为我需要在不同时间几分钟后运行几个命令。

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在大量工作中被认为是可靠的,我必须控制我的源代码是否有错误,或{{1}}只是不要被认为足够可靠,可以在纯粹的程序设计环境中工作吗?

1 个答案:

答案 0 :(得分:1)

我们不知道你需要多少可靠的'然而,你所描述的似乎是使用at的反模式。

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

' at'通常会以1秒的精度运行任务,但无法保证任务将始终在计划的1秒内运行。如果您需要那种确定性,那么您需要一个实时操作系统。

某些版本的' cron'并且' at'如果负载超过某个阈值,则不会启动作业。除了这种情况,我从来不知道' at'接受一项(最终)由atd运营的工作。

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

您在此处向我们展示的代码并未检查“' at'”的返回代码。