"at" 有多可靠
how reliable is "at"
我正在使用命令行调度程序,因为我需要 运行 多个命令在不同时间相继执行几分钟。
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 正在工作(并且文件中的命令在手动调用时按预期工作),但一些作业 failing/not 正在执行。
由于我没有与 at
一起工作过这么多工作,所以我怀疑 at
是否像我需要的那样可靠。或者我的代码缺少我看不到的东西。
所以这就是我的问题的重点,at
在大量工作中被认为是可靠的,我是否必须控制我的源代码以防止错误,或者 at
只是不被认为足够可靠,无法在纯程序执行的环境中工作?
我们不知道您需要 'at' 有多可靠,但是您所描述的似乎是使用 at 的反模式。
如果您需要按顺序 运行 的作业,则应将它们链接在具有单个入口点的脚本中。
虽然 'at' 通常会 运行 任务,精度为 1 秒,但不能保证任务总是 运行 在计划的 1 秒内。如果您需要那种程度的确定性,那么您需要一个实时操作系统。
某些版本的 'cron' 和 'at' 如果负载超过特定阈值将不会启动作业。除了那种情况,我从来不知道 'at' 会接受一份 atd 没有(最终)运行 的工作。
当然,更新的系统可能不使用 atd 和 crond - systemd 支持此功能(是否有效以及它是否是一个好主意是一个很长的论点)。
您在此处向我们展示的代码不会检查来自调用 'at'.
的 return 代码
我正在使用命令行调度程序,因为我需要 运行 多个命令在不同时间相继执行几分钟。
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 正在工作(并且文件中的命令在手动调用时按预期工作),但一些作业 failing/not 正在执行。
由于我没有与 at
一起工作过这么多工作,所以我怀疑 at
是否像我需要的那样可靠。或者我的代码缺少我看不到的东西。
所以这就是我的问题的重点,at
在大量工作中被认为是可靠的,我是否必须控制我的源代码以防止错误,或者 at
只是不被认为足够可靠,无法在纯程序执行的环境中工作?
我们不知道您需要 'at' 有多可靠,但是您所描述的似乎是使用 at 的反模式。
如果您需要按顺序 运行 的作业,则应将它们链接在具有单个入口点的脚本中。
虽然 'at' 通常会 运行 任务,精度为 1 秒,但不能保证任务总是 运行 在计划的 1 秒内。如果您需要那种程度的确定性,那么您需要一个实时操作系统。
某些版本的 'cron' 和 'at' 如果负载超过特定阈值将不会启动作业。除了那种情况,我从来不知道 'at' 会接受一份 atd 没有(最终)运行 的工作。
当然,更新的系统可能不使用 atd 和 crond - systemd 支持此功能(是否有效以及它是否是一个好主意是一个很长的论点)。
您在此处向我们展示的代码不会检查来自调用 'at'.
的 return 代码