diff --git a/webservices/cron_status.php b/webservices/cron_status.php index c83c4d406..e26a7701b 100644 --- a/webservices/cron_status.php +++ b/webservices/cron_status.php @@ -1,39 +1,82 @@ add_header('Access-Control-Allow-Origin: *'); + $oP->SetData(["status" => $sStatus, 'message' => $sMsg]); + $oP->SetOutputDataOnly(true); + $oP->Output(); +} +catch (Exception $e) { + \IssueLog::Error("Cannot cron status", null, ['msg' => $e->getMessage(), 'stack' => $e->getTraceAsString()]); + http_response_code(500); + $oP = new JsonPage(); + $oP->add_header('Access-Control-Allow-Origin: *'); + $oP->SetData(["message" => $e->getMessage()]); + $oP->SetOutputDataOnly(true); + $oP->Output(); } -echo ERROR . "(missing $sLogFile)"; +function ReadParam($sParam, $sDefaultValue = null, $sSanitizationFilter = utils::ENUM_SANITIZATION_FILTER_RAW_DATA) +{ + $sValue = utils::ReadParam($sParam, null, true, $sSanitizationFilter); + if (is_null($sValue)) { + $sValue = utils::ReadPostedParam($sParam, $sDefaultValue, $sSanitizationFilter); + } + + return trim($sValue); +} \ No newline at end of file diff --git a/webservices/launch_cron_asynchronously.php b/webservices/launch_cron_asynchronously.php index 22020dea9..728ae1d0d 100644 --- a/webservices/launch_cron_asynchronously.php +++ b/webservices/launch_cron_asynchronously.php @@ -1,24 +1,100 @@ Get('php_path')); + + if ($bAsynchronous) { + $sCli = sprintf("$sPHPExec %s/cron.php $sCliParams 2>&1 >>$sLogFile &", __DIR__); + file_put_contents($sLogFile, $sCli); + $process = popen($sCli, 'r'); + } else { + + + $sCli = sprintf("\n $sPHPExec %s/cron.php $sCliParams", __DIR__); + $fp = fopen($sLogFile, 'a+'); + fwrite($fp, $sCli); + + $aDescriptorSpec = [ + 0 => ["pipe", "r"], // stdin + 1 => ["pipe", "w"], // stdout + ]; + $rProcess = proc_open($sCli, $aDescriptorSpec, $aPipes, __DIR__, null); + + $sStdOut = stream_get_contents($aPipes[1]); + fclose($aPipes[1]); + $iCode = proc_close($rProcess); + + fwrite($fp, $sStdOut); + fwrite($fp, "Exiting: ".time().' ('.date('Y-m-d H:i:s').')'); + fclose($fp); + } + + http_response_code(200); + $oP = new JsonPage(); + $oP->add_header('Access-Control-Allow-Origin: *'); + $oP->SetData(["message" => "OK"]); + $oP->SetOutputDataOnly(true); + $oP->Output(); } -$sLogFile = APPROOT . "log/$sLogFilename"; - -$sCliParams = utils::ReadParam("cron_cli_parameters", null, true, utils::ENUM_SANITIZATION_FILTER_RAW_DATA); -if (is_null($sCliParams)) { - $sCliParams = utils::ReadPostedParam("cron_cli_parameters", null, utils::ENUM_SANITIZATION_FILTER_RAW_DATA) ?? "--help"; +catch (Exception $e) { + \IssueLog::Error("Cannot run cron", null, ['msg' => $e->getMessage(), 'stack' => $e->getTraceAsString()]); + http_response_code(500); + $oP = new JsonPage(); + $oP->add_header('Access-Control-Allow-Origin: *'); + $oP->SetData(["message" => $e->getMessage()]); + $oP->SetOutputDataOnly(true); + $oP->Output(); } -if (is_null($sCliParams)){ - $sCliParams = "--help"; -} else { - $sCliParams = base64_decode($sCliParams, true); -} +function ReadParam($sParam, $sDefaultValue = null, $sSanitizationFilter = utils::ENUM_SANITIZATION_FILTER_RAW_DATA) +{ + $sValue = utils::ReadParam($sParam, null, true, $sSanitizationFilter); + if (is_null($sValue)) { + $sValue = utils::ReadPostedParam($sParam, $sDefaultValue, $sSanitizationFilter); + } -$sCli = sprintf("php %s/cron.php $sCliParams 2>&1 >>$sLogFile &", __DIR__); -exec("echo $sCli>>$sLogFile"); -$process=popen($sCli, 'r'); + return trim($sValue); +} \ No newline at end of file