Eu tenho um cron job configurado no cPanel para executar uma API PHP diariamente à meia-noite (fuso horário boche). O script verifica uma API e gera tarefas recorrentes, mas não está sendo executado corretamente no horário agendado.
Formato atual:
Formato do Cron Job 1:
/usr/bin/curl -s https://clients_domain/api/task_assignments/checkAndRecur.php
Formato do Cron Job 2:
/usr/bin/php82 /usr/www/users/user_name/maintenance/api/task_assignments/checkAndRecur.php
O acionamento manual da API funciona muito e posso confirmar que o script se comporta conforme o esperado quando chamado diretamente. Os logs cron indicam que o trabalho é iniciado, mas as tarefas não são Sua visita nos ajuda a continuar oferecendo o melhor para você! Cá está uma ingressão de log quando executei o trabalho manualmente:
Oct 7 11:10:01 www390 CRON[32665]: (user_name) CMD ('/usr/bin/flock' -n -E 0 '/usr/home/user_name/.tmp/bdc369237527a953f28e2870e706903f.lck' '/bin/bash' -c '/usr/bin/php82 /usr/www/users/user_name/maintenance/api/task_assignments/checkAndRecur.php schedule:run >> /dev/null 2>&1')
Depois de perceber que estava chamando a API, que requer uma solicitação GET, mudei para isto:
/usr/bin/curl -s https://clients_domain/api/task_assignments/checkAndRecur.php >> /usr/home/user_name/cron.log 2>&1
Cá está um registro de um acionador manual bem-sucedido:
{"status":200,"message":"No recurring tasks to create"}
No entanto, quando agendado, ele não funciona corretamente no horário especificado. Os logs do cliente mostraram que o cron foi executado, mas não executou as tarefas conforme planejado:
Oct 8 08:43:01 www390 CRON[72554]: (user_name) CMD ('/usr/bin/flock' -n -E 0 '/usr/home/user_name/.tmp/f0c00bd5f7b9f9e68ac1edc278927e6e.lck' '/bin/bash' -c '/usr/bin/curl "https://clients_domain/api/task_assignments/checkAndRecur.php >> /usr/home/user_name/cron.log 2>&1"')
Quando pedi ao cliente para usar o seguinte comando:
/usr/bin/curl -H "Content-Type: application/json" -X GET https://clients_domain/api/task_assignments/checkAndRecur.php >> /home/user_name/cron.log 2>&1
Eles atualizaram o cron job para:
01 00 * * * /usr/bin/curl -H "Content-Type: application/json" -X GET "https://clients_domain/api/task_assignments/checkAndRecur.php" >> /home/user_name/cron.log 2>&1
Apesar dessa mudança, o cron job ainda não está sendo executado conforme esperado no horário agendado. Os logs do cron mostram que ele foi executado unicamente quando agendado manualmente, e não à meia-noite porquê solicitado.
Cá está o que vi em meus logs personalizados quando acionei o trabalho manualmente:
========================================
[09-10-2024 08:07:17] [INFO] CRON Job: Check and Recreate Recurring Tasks - (Started)
[09-10-2024 08:07:17] [INFO] Task check and recreation response: {"status":201,"message":"Recurring tasks created successfully","task_recreated":2}
[09-10-2024 08:07:17] [INFO] CRON Job: Check and Recreate Recurring Tasks - (Completed) in 0.064024925231934 seconds
========================================
Nascente é o registro que estou chamando a API:
connectDB();
logMessage("Database connection established", 'INFO');
$task_assignment = new TaskAssignment($db);
try {
$response = $task_assignment->checkAndRecreateRecurringTasks();
logMessage("Task check and recreation response: " . json_encode($response), 'INFO');
if ($response["status"] == 201) {
header("HTTP/1.1 201 Created");
echo json_encode(array("status" => 201, "message" => "Wiederkehrende Aufgaben erfolgreich erstellt", "task_recreated" => $response["task_recreated"]));
logMessage("Recurring tasks successfully created", 'INFO');
} else if ($response["status"] Sua visita nos ajuda a continuar oferecendo o melhor para você! 200) {
header("HTTP/1.1 200 OK");
echo json_encode(array("status" => 200, "message" => "Keine wiederkehrenden Aufgaben zu erstellen"));
logMessage("No recurring tasks to create", 'INFO');
} else {
header("HTTP/1.1 500 Internal Server Error");
echo json_encode(array("status" => 500, "message" => "Interner Serverfehler"));
logMessage("Internal server error", 'ERROR');
}
} catch (Exception $e) {
header("HTTP/1.1 503 Service Unavailable");
echo json_encode(array("status" => 503, "message" => "Aufgaben konnten nicht überprüft und aktualisiert werden"));
logMessage("Exception occurred: " . $e->getMessage(), 'ERROR');
}
} else {
header("HTTP/1.1 405 Method Not Allowed");
echo json_encode(array("status" => 405, "message" => "Methode nicht erlaubt"));
logMessage("Method not allowed: $request_method", 'WARNING');
}
$endTime = microtime(true);
$executionTime = $endTime - $startTime;
logMessage("CRON Job: Check and Recreate Recurring Tasks - (Completed) in $executionTime seconds", 'INFO');
logMessage("========================================", 'INFO');
O que eu tentei:
Inicialmente, configurei o cron job usando leste comando:
/usr/bin/curl -s https://clients_domain/api/task_assignments/checkAndRecur.php
Era para invocar a API, mas não funcionou conforme o esperado.
Portanto tentei outra abordagem usando PHP diretamente:
/usr/bin/php82 /usr/www/users/user_name/maintenance/api/task_assignments/checkAndRecur.php
Mesmo assim, as tarefas não foram geradas.
Depois de perceber que a API exigia uma solicitação GET, modifiquei o cron job para:
/usr/bin/curl -H "Content-Type: application/json" -X GET https://clients_domain/api/task_assignments/checkAndRecur.php >> /usr/home/user_name/cron.log 2>&1
Isso funcionou manualmente, mas não foi executado no horário agendado. Mais tarde, pedi ao cliente para definir o cron job com esta forma para ser executado às 00h01 diariamente:
01 00 * * * /usr/bin/curl -H "Content-Type: application/json" -X GET https://clients_domain/api/task_assignments/checkAndRecur.php >> /home/user_name/cron.log 2>&1
O que eu esperava:
Eu esperava que o cron job fosse executado involuntariamente no horário programado (00h01 todos os dias) e acionasse a API, que deveria portanto verificar e gerar tarefas recorrentes. As tarefas devem ser criadas conforme mostrado nos meus testes manuais, onde a API retornou uma mensagem de sucesso.
Tags:
Crédito: Manancial Original