여러 시간에 서로 다른 시간에 여러 명령을 실행해야하기 때문에 명령 행 스케줄러에서 작업하고 있습니다. 얼마나 신뢰할 수있는 "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);
처럼 호출, 크론 그 이후 일정을 다른 명령, API 응답에 따라 첫 번째 프로세스를 실행합니다. 2 분마다 명령을 실행해야하므로 cron
을 at
으로 자주 발생시킵니다. cron이 작동 중이고 수동으로 호출 할 때 파일의 명령이 작동한다고 알고 있지만 작업 중 일부는 실패/실행되지 않고 있습니다.
at
이 내가 필요로하는만큼 신뢰할 수 있다면이 질문에 대한 답변을 드리겠습니다. 아니면 내 코드가 내가보기에 부족하다.
그래서 내 질문에 대한 포인트는 at
을 엄청난 양의 작업에 안정적으로 고려해야하며 내 소스 코드를 오류로 제어해야합니까 아니면 at
은 작동하기에 충분히 신뢰할 만하다고 생각하지 말아야합니다. 순전히 programaticaly 실행 환경에서?
고맙습니다. 매우 합리적입니다. 하나의 진입 점은 내가 매우 오랫동안 생각해 왔던 것이지만, 두 번째 스크립트가 때로는 처음 5 시부 터 10 분 후에 시작해야하기 때문에 효율적인 방법을 찾을 수 없습니다. 나에게 도움이 될만한 생각이 떠오르는가? 그 문제에 대해서는 – baao
일 것이므로,'at '는 실제로 필요하지 않습니다. 작업이 다시 시작될 때까지 diff를 계산하고, 그 시간 동안'sleep()'을 계산하면됩니다. 예. cron은 첫 번째 실행을 위해 작업을 시작하고 15 분 3 초 동안 실행되며 초기 실행 후 30 분 후에 다시 실행되어야하므로 14 분 57 초 동안 대기 상태가됩니다. –
@Marc B : 데몬을 실행하는 것은 그렇게 간단하지 않습니다. 시그널 핸들러를 추가하는 것 말고도 stdio와 setsid를 포크하고 닫아야한다. – symcbean