Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

douglaspaiani

Script p/ executar vários links com Cron

Recommended Posts

Olá pessoal,

 

Eu e uns amigos desenvolvemos um game online de manager de futebol, estilo Top Eleven, mas estamos com problema em uma coisa. As partidas são simuladas da seguinte forma: site.com/sistema/simular-partida.php?id=999&acao=simular

 

O get acao faz rodar o script que temos de simulação de jogo e salva as informações dos dois times nos respectivos bancos. Mas aí tem um porém, isso só acontece se um dos jogadores der o "Play", e se os dois jogadores não jogar, a partida não acontece.

 

Como posso fazer para rodar centenas de partidas todos os dias as 15h com cron?

 

Lembrando que cada partida tem um id diferente, sei fazer crons pra 1 partida somente. Tem como eu criar um arquivo (partida-cron.php), e mandar rodar todos os dias as 15h, e nesse arquivo ter algum comando que rode todas as partidas?

 

Preciso urgente! Obrigado á todos desde já!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar cURL ou file_get_contents para realizar requisições à URL:

site.com/sistema/simular-partida.php?id=999&acao=simular

 

Acredito que os IDs estejam gravados no BD, então você pode fazer uma consulta para pegar os IDs e dentro do laço fazer a requisição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim as IDs estão tudo no banco, só consultar e usar um WHILE.

 

Mas como usaria o file_get_contents? Pelo que pesquisei ele pega informações da página, teria algum exemplo prático?

 

Obrigado pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendo o motivo de usar cURL , ou file_get_contents ainda mais se a chamada é feita via GET (?id=)

 

 

 

A duvida duvida inicial era:

 

 

Como posso fazer para rodar centenas de partidas todos os dias as 15h com cron?

 

Nesse caso é só agendar a tarefa.....

 

Estamos falando de uma hospedagem compartilhada?

Ex: Kinghost, HostGator, Locaweb?

Um Servidor caseiro Linux ?

 

Se qualquer uma das respostas acima for verdade é simples.

Agenda a tarefa para executar todos os dias as 15h...

http://www.infowester.com/linuxcron.php

https://www.vivaolinux.com.br/artigo/Usando-cron-e-crontab-para-agendar-tarefas

http://pt.stackoverflow.com/questions/124518/configurar-cronjob-para-executar-de-5-em-5-minutos-quando-estiver-dentre-5-a-20

 

 

Obs: Windows Server também possui esse serviço.

 

 

Resumo:

Faça seu script inicial partida-cron.php e chame ele de x em x tempo via cron...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim as IDs estão tudo no banco, só consultar e usar um WHILE.

 

Mas como usaria o file_get_contents? Pelo que pesquisei ele pega informações da página, teria algum exemplo prático?

 

Obrigado pela atenção!

Vamos pensar juntos, o que file_get_contents/cURL fazem? Uma requisição a uma página? Correto, essa requisição funcionaria como o usuário que acessa a página para "iniciar" a partida.

 

Não entendo o motivo de usar cURL , ou file_get_contents ainda mais se a chamada é feita via GET (?id=)

É só pensar, o usuário disse que é necessário acessar uma determinada URL para que aconteça o esperado, essa URL depende de determinados parâmetros, neste caso agendar o script não vai funcionar, a menos que ele altere o script para que o mesmo trabalhe quando o usuário acessa e quando o cron acessa, pois existirão 2 situações diferentes.

 

Citei o cURL pois em muitos hosts file_get_contents não permite requisições em URL externas, lembrando que se ele usar o file_get_contents sem passar URL completa (e mesmo que seja a do próprio servidor é considerada externa) o que será resgatado é o conteúdo do arquivo, já se for passado a URL completa (como no navegador) ai será retornado o arquivo após a execução. Lembrando que cURL também não está ligado a usar ou não GET/POST, cURL por si só é algo muito mas avançado e inclusive preferível em relação ao file_get_contents (neste contexto, análise minha).

 

O que estou querendo evitar aqui é que ele duplique a ação existente no arquivo que já funciona, pois isso acabará resultando em trabalho dobrado quando ele quiser adicionar funcionalidades (óbvio, estou assumindo que o sistema não levou em consideração isto também).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente @ESerra, a função precisa de que alguém acesse a URL pra que ela aconteça. Digamos que temos 500 partidas todos os dias, imagina fazer isso manualmente? kkkk

 

Alguém tem um exemplo de usar essa função do cURL citado? Pra mim ter uma base e pesquisar mais a fundo...

 

*Meu servidor é compartilhado (WebLink).

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

função precisa de que alguém acesse a URL pra que ela aconteça

 

e o cron não faz exatamente uma chamada HTTP?? Xapralá....

 

https://www.weblink.com.br/hospedagem

->Cron Jobs (presente em todos os planos)

Alguém tem um exemplo de usar essa função do cURL citado? Pra mim ter uma base e pesquisar mais a fundo... 

http://php.net/manual/pt_BR/book.curl.php

http://blog.thiagobelem.net/tutorial-basico-de-curl-instalacao-configuracao-e-uso

http://imasters.com.br/artigo/4140/php/usando-a-biblioteca-curl-do-php?trace=1519021197&source=single

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Giovanird
      Olá a todos!

      Tenho uma rotina no cron em um servidor que executa uma pagina onde é alterado o status de clientes.
      Preciso que após acessar e alterar o status do cliente, está pagina seja direcionada para uma outra pagina após uns 10 segundos.
      Executando diretamente pelo navegador a página é direcionada corretamente, quando executada pelo cron ela não direciona.
       
      No  cron estou usando o comando:
      curl -s https://www.dominio.com.br/alt.php
       
      No direcionamento coloquei um refresh javascript dentro de um header
      header( 'refresh:10; url=https://www.dominio.com.br/posalt.php?t=2');
       
      Obs.: Está pagina já roda a algum tempo no cron sem o direcionamento, agora que se fez necessário criar este direcionamento.
       

    • Por Jack Oliveira
      Ola galera boa noite
      Pessoal preciso enviar um arquivo por e-mail, onde o sistema faz backups do banco de dados manual e automatico
       
      preciso que seja enviado apenas o sql que for gerado tanto manual quanto automatico
      ambos esta fazendo o backups normalmente sem problemas
       
      Segue o código a baixo
       
      <?php session_start(); require_once('../../database/config.php'); require_once('../../database/config.database..php'); require_once('../../includes/funcoes.php'); require_once('controller.php'); if (!is_dir('../../backups')) { @mkdir('../../backups', 0777, true); } $name_backup = "Backups_" . date("ymdHis"); $querySQL = DBCreate('backups', [ 'name' => "Banco_de_dados_" . $name_backup, 'type' => 'sql', 'status' => 'Iniciado' ], true); $queryZIP = DBCreate('backups', [ 'name' => "Arquivos_ZIP_" . $name_backup, 'type' => 'zip', 'status' => 'Iniciado' ], true); try { require_once("Mysqldump.php"); $dump = new Ifsnop\Mysqldump\Mysqldump('mysql:host=' . DB_HOSTNAME . ';dbname=' . DB_DATABASE . '', '' . DB_USERNAME . '', '' . DB_PASSWORD . ''); $dump->start("../../backups/Banco_{$name_backup}.sql"); if (file_exists("../../backups/Banco_{$name_backup}.sql")) { DBUpdate('backups', array('status' => 'concluido'), "id = '{$querySQL}'"); } } catch (\Exception $e) { $return = [ "title" => "Oops!", "msg" => "Erro ao exportar banco de dados.", "icon" => "error" ]; DBUpdate('backups', array('status' => 'Erro ao exportar banco de dados'), "id = '{$querySQL}'"); Redireciona('?erro'); } try { $filename = "Arquivos_ZIP_{$name_backup}.zip"; $rootPath = realpath('../../wa/'); $zip = new ZipArchive(); $zip->open("../../backups/$filename", ZipArchive::CREATE | ZipArchive::OVERWRITE); $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY ); foreach ($files as $name => $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($rootPath) + 1); $zip->addFile($filePath, $relativePath); } } $zip->close(); } catch (\Exception $e) { $return = [ "title" => "Oops!", "msg" => "Erro ao criar arquivo de backup no formato zip!", "icon" => "error" ]; DBUpdate('backups', array('status' => 'Erro ao criar arquivo de backup no formato zip'), "id = '{$queryZIP}'"); } DBUpdate('backups', array('status' => 'concluido'), "id = '{$queryZIP}'"); if (empty($return)) { $return = [ "title" => "Deu Certo!", "msg" => "Backup Realizado com Sucesso!", "icon" => "success" ]; } echo json_encode($return); if (!empty(getConfigBackup('mail_notify'))) { @require_once('../../controller/class.phpmailer/PHPMailerAutoload.php'); $mail = new PHPMailer(); $mail->CharSet = "UTF-8"; $mail->isSMTP(true); $mail->SMTPSecure = getConfigBackup('mail_seguranca'); $mail->Host = getConfigBackup('mail_host'); $mail->Username = getConfigBackup('mail_email'); $mail->Password = getConfigBackup('mail_senha'); $mail->Port = getConfigBackup('mail_porta'); $mail->From = getConfigBackup('mail_email'); $mail->FromName = ConfigPainel('site_nome'); $mail->Subject = "Seu Backup está pronto!"; if (strstr(getConfigBackup('mail_notify'), ';')) { $email = explode(';', getConfigBackup('mail_notify')); foreach ($email as $key => $value) { $mail->AddAddress($value); } } else { $mail->AddAddress(getConfigBackup('mail_notify')); } $dados = "Olá, o Backup do painel " . ConfigPainel('site_nome') . " foi realizado com sucesso. Ele está disponível em seu dashboard na área de backups. Acesse o Painel para Gerenciar seus backups."; $mail->Body = "<div id='m_-7598057918015146334m_-2331253013811829785wrapper' dir='ltr' style='background-color:#f7f7f7;margin:0;padding:70px 0 70px 0;width:100%'> <table border='0' cellpadding='0' cellspacing='0' height='100%' width='100%'> <tbody> <tr> <td align='center' valign='top'> <div id='m_-7598057918015146334m_-2331253013811829785template_header_image'></div> <table border='0' cellpadding='0' cellspacing='0' width='600' id='m_-7598057918015146334m_-2331253013811829785template_container' style='background-color:#ffffff;border:1px solid #dedede;border-radius:3px!important'> <tbody> <tr> <td align='center' valign='top'> <table border='0' cellpadding='0' cellspacing='0' width='600' id='m_-7598057918015146334m_-2331253013811829785template_header' style='background-color:#333333;border-radius:3px 3px 0 0!important;color:#ffffff;border-bottom:0;font-weight:bold;line-height:100%;vertical-align:middle;font-family:&quot;Helvetica Neue&quot;,Helvetica,Roboto,Arial,sans-serif'> <tbody> <tr> <td id='m_-7598057918015146334m_-2331253013811829785header_wrapper' style='padding:36px 48px;display:block'> <h1 style='color:#ffffff;font-family:&quot;Helvetica Neue&quot;,Helvetica,Roboto,Arial,sans-serif;font-size:30px;font-weight:300;line-height:150%;margin:0;text-align:left'>Backup Realizado com sucesso</h1> </td> </tr> </tbody> </table> </td> </tr> <tr> <td align='center' valign='top'> <table border='0' cellpadding='0' cellspacing='0' width='600' id='m_-7598057918015146334m_-2331253013811829785template_body'> <tbody> <tr> <td valign='top' id='m_-7598057918015146334m_-2331253013811829785body_content' style='background-color:#ffffff'> <table border='0' cellpadding='20' cellspacing='0' width='100%'> <tbody> <tr> <td valign='top' style='padding:48px'> <div id='m_-7598057918015146334m_-2331253013811829785body_content_inner' style='color:#636363;font-family:&quot;Helvetica Neue&quot;,Helvetica,Roboto,Arial,sans-serif;font-size:14px;line-height:150%;text-align:left'> <p style='margin:0 0 16px'></p> $dados </div> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </div>"; $mail->IsHTML(true); $mail->Send(); $mail->ClearAllRecipients(); $mail->ClearAttachments(); } Lembrando so ser enviado o que for sql
      Ex: Banco_de_dados_Backups_210412193634.sql
      SQL_Backup_210412180942.sql
       
      Conforme for gerando o backups
      no create tem type sql
       
       
      Não sei isso vai ajudar em algo mais a tabela  backups esta assim
       
      INSERT INTO `backups` (`id`, `name`, `type`, `created_at`, `status`) VALUES (1, 'SQL_Backup_210412180942', 'sql', '2021-04-12 21:09:42', 'concluido'), (2, 'ZIP_Backup_210412180942', 'zip', '2021-04-12 21:09:42', 'Iniciado'), (3, 'Banco_de_dados_Backups_210412193634', 'sql', '2021-04-12 22:36:34', 'concluido'), (4, 'Arquivos_ZIP_Backups_210412193634', 'zip', '2021-04-12 22:36:34', 'Iniciado');  
       
      Se puderem da esta ajuda fico grato
    • Por Aleksandr Kopelevich
      Fala pessoal! 
       
      Eu publiquei uma dica sobre como limpar seu servidor Linux de tempos em tempos. A ideia é simples, basta rodar:
       
      find '/var/log/apache2' -mtime +6 -type f -delete
       
       
      Se quiser dar uma olhada nos códigos, escrevi um artigo para este vídeo: https://www.akop.com.br/posts/como-apagar-arquivos-antigos-do-servidor-usando-o-cron
    • Por Shinchila_Matadora
      Pessoal, estou precisando executar um arquivo .php dentro de um servidor todos os dias da semana as 13, exceto sábado e domingo.
      Alguém sabe qual o comando que devo dar para que isso seja possível?
      E além disso, tem alguma forma de visualizar as funções CRON que eu inputar no servidor?
      Estou começando agr e preciso de ajuda.
      Obrigado!
    • Por ppaulo.777
      Opa pessoal, eu preciso da ajuda de vocês.
       
      Eu tenho uma conta de hospedagem CPANEL, e, eu estou precisando usar um CRON nela, que funcionará da seguinte forma:
       
      - Acessar o arquivo xx.php 1 vez ao dia;
       
      date_default_timezone_set('America/Sao_Paulo'); $conn = mysqli_connect('localhost', 'xuserx', 'xpassx', 'xbdx'); $query = mysqli_query($conn, "SELECT * FROM clientes"); $url = 'https://api.sendgrid.com/'; $user = 'xx'; $pass = 'xx'; while($array = mysqli_fetch_assoc($query)){ $vencimentoant = $array['vencimento']; $vencimento = str_replace("/","-",$vencimentoant); $date = date('d/m/Y', strtotime('-3 days', strtotime($vencimento))); if($date == date('d/m/Y')){ $nome = $array['nome']; $mail = $array['email']; include("templated.php"); } if(date('d/m/Y')==$vencimentoant){ $nome = $array['nome']; $mail = $array['email']; include("templates.php"); } } Pra isso, criei uma tarefa CRON pelo cpanel, contendo o seguinte comando:
      /usr/local/bin/php /home/xcontax/public_html/cron/cron.php Funcionando com horário assim: 0 0 * * * (1x a cada dia)
       
      Porém, de 2 dias atrás pra hoje não funcionou;
       
      Sendo que no 1* dia que fiz esse sistema, eu ajustei pra ficar funcionando de 1 á 1 minuto, então, funcionou, hoje também coloquei pra funcionar de 1 a 1 minuto essa tarefa e funcionou;
       
      Mas, eu me pergunto, por que em cada 1 minuto essa tarefa funciona mas em 1 á 1 dia não funciona ?
       
      Preciso urgente mesmo pessoal, obrigado!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.