From 863e397fb263cfe3ebc15ed7653732aa1338e1ad Mon Sep 17 00:00:00 2001 From: odain Date: Mon, 20 Oct 2025 09:30:55 +0200 Subject: [PATCH 1/2] be able to call cron asynchronously --- webservices/cron_status.php | 39 ++++++++++++++++++++++ webservices/launch_cron_asynchronously.php | 24 +++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 webservices/cron_status.php create mode 100644 webservices/launch_cron_asynchronously.php diff --git a/webservices/cron_status.php b/webservices/cron_status.php new file mode 100644 index 0000000000..c83c4d406f --- /dev/null +++ b/webservices/cron_status.php @@ -0,0 +1,39 @@ +&1 >>$sLogFile &", __DIR__); +exec("echo $sCli>>$sLogFile"); +$process=popen($sCli, 'r'); From 13baf6037a664107bbdf8c6f01b10728d4aa50ed Mon Sep 17 00:00:00 2001 From: odain Date: Mon, 20 Oct 2025 11:44:55 +0200 Subject: [PATCH 2/2] cron endpoints behind login mechanism via auth_user and auth_pwd + deal with status_only different output --- webservices/cron_status.php | 93 +++++++++++++----- webservices/launch_cron_asynchronously.php | 108 ++++++++++++++++++--- 2 files changed, 160 insertions(+), 41 deletions(-) diff --git a/webservices/cron_status.php b/webservices/cron_status.php index c83c4d406f..e26a7701b0 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(); +} + +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); + } -echo ERROR . "(missing $sLogFile)"; + return trim($sValue); +} \ No newline at end of file diff --git a/webservices/launch_cron_asynchronously.php b/webservices/launch_cron_asynchronously.php index 22020dea90..728ae1d0db 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(); } +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(); +} + +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