api – Cron Job agendado no cPanel não é executado…

php - erro laravel: Classe alvo [validator] ...

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 geradas. 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:

Sua visita nos ajuda a continuar oferecendo o melhor para você! } else {
        $logEntry = "[$timestamp] [$type] [IP: $ipAddress] $message" . PHP_EOL;
    }
    file_put_contents($logFile, $logEntry, FILE_APPEND);
}
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json");
header("Access-Control-Allow-Methods: GET");
header("Access-Control-Allow-Headers: Access-Control-Allow-Headers, Content-Type, Access-Control-Allow-Methods, Authorization, X-Requested-With");
$startTime = microtime(true);
logMessage("========================================", 'INFO');
logMessage("CRON Job: Check and Recreate Recurring Tasks - (Started)", 'INFO');
$request_method = $_SERVER["REQUEST_METHOD"];
logMessage("Request Method: $request_method", 'INFO');
if ($request_method == "GET") {
    require_once "../config/database.php";
    require_once "../models/TaskAssignment.php";
    $database = new Database();
    $db = $database-?>connectDB();
    logMessage("Database connection established", 'INFO');
 Sua visita nos ajuda a continuar oferecendo o melhor para você!   $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 Sua visita nos ajuda a continuar oferecendo o melhor para você! => 201, "message" => "Wiederkehrende Aufgaben erfolgreich erstellt", "task_recreated" => $response["task_recreated"]));
            logMessage("Recurring tasks successfully created", 'INFO');
        } else if ($response["status"] == 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:

  1. 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.

  2. 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.

  3. 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

Adriano Pina

Adriano Pina

Análise de Sistemas | SEO e Google Ads | Fundador da Loja Script PHP Aqui & Marca Shoslh de tecnologia

Especialista em transformar ideias em soluções digitais e acelerar o crescimento online.

Deixe um comentário

Tem perguntas? Nos envia sua mensagem 24/7!

(17) 99100-0874

Endereço & Contato

Centro, Interior de São Paulo
E-mail: [email protected]

Links Úteis
BAIXAR APP | SCRIPT PHP AQUI
Certificados
0
    0
    Seu carrinho
    Seu carrinho está vazio

    Usamos cookies para garantir que oferecemos a melhor experiência em nosso site. 

       

    X

    Clique em um de nossos representantes abaixo para conversar no WhatsApp ou envie um email para: 📧 [email protected]

    Precisa de ajuda fale conosco?