Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá boa noite :D
Tenho uma dúvida, na verdade um desanimo com o Crontab, carinha dificil de se agradar
Tenho os seguintes cron cadastrados:
/30 * /usr/bin/curl --silent https://meusite/tarefas/cronjobs/aquivo1.php >/dev/null 2>&1
* /usr/bin/curl --silent https://meusite/tarefas/cronjobs/aquivo2.php >/dev/null 2>&1
* /usr/bin/curl --silent https://meusite/tarefas/cronjobs/aquivo3.php >/dev/null 2>&1
* /usr/bin/curl --silent https://meusite/tarefas/cronjobs/aquivo4.php >/dev/null 2>&1
* /usr/bin/curl --silent https://meusite/tarefas/cronjobs/aquivo5.php >/dev/null 2>&1
E advinhem, nenhum deles funciona, pelo menos no cron, quando os chamo no navegador funciona
Ja me disseram que não é para usar Curl com PHP mas não me disseram porque, então me orientaram buscar algo por .SH
Então baseado em algumas pesquisas fiz assim:
#!/bin/bash
CONSULT=$((($RANDOM %1000) + 1))
$ php -q https://meusite/tarefas/cronjobs/aquivo1.php
$ php -q https://meusite/tarefas/cronjobs/aquivo2.php
$ php -q https://meusite/tarefas/cronjobs/aquivo3.php
$ php -q https://meusite/tarefas/cronjobs/aquivo4.php
$ php -q https://meusite/tarefas/cronjobs/aquivo5.php
neste caso estou salvando com o formato arquivo.sh
ja dei permissão desta forma:
sudo chmod +x /path/dir/arquivo.sh
E nada, nadinha nadica de nada
voces ja fizeram alguma tarefa no cron para chamar aquivos PHP? Pooderiam me ajudar?
Preciso executar estes 5 arquivos. Basicamentes eles consultam uma api, recolhem um valor e salvaam em uma pasta (bem simples).
Todos funcionam se eu os chamo no browser, mas no cron não rodam
sim, o cron esta ativo no meu servidor, uso o ubunto 20.4
Olá @Matheus Tavares :D, tudo bem e você como esta hoje?
Estranhamente o Cron funcionava com estes comandos, mas no últimos dias não funcionam mais :/
o que estou fazendo:
meu arquivo esta aqui:
/var/www/html/bia/biabot/cron
como estou chamando agora noCrontab:
* /usr/bin/php /var/www/html/bia/biabot/cron/carteiras.php
Esse arquivo de carteiras.php verifica uma api e deveria gravar um arquivo salvando com o nome ou substituindo com o nome "carteiras.txt" na seguite pasta:
/var/www/html/bia/biabot/arquivosgerados
O que recebo do cron é:
>
Citar
PHP Warning: file_put_contents(../arquivosgerados/carteiras.txt): Failed to open stream: No such file or directory in /usr/bin/php /var/www/html/bia/biabot/cron/carteiras.php on line 24
Meu código chamado carteiras.php:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://apilist.tronscan.org/api/token_trc20?contract=TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
$response = json_decode($response, true);
$value1 = $response['trc20_tokens'][0]['holders_count'];
if (empty($value1)) {
$value1 = is_file('../arquivosgerados/carteiras.txt') ? file_get_contents('../arquivosgerados/carteiras.txt') : null;
} else {
$value1 = round($value1, 6);
file_put_contents('../arquivosgerados/carteiras.txt', $value1);
}
Eu sei, não briga comigo sobre o CURL, mas era um arquivo antigo antes de me ensinar sobre o Guzzle que ainda não mudei essa parte
Bem, como percebeu estou fazendo o cron com o usuário root, para meu site uso o Cloudflare, não sei se ele esta bloqueando as requisições.Meu pai eterno, descobri o problema e foi uma bobeira que eu não havia me atentado e que é basica hi hi hi
Preparado? Então o Firewall da Cloudflare estava bloqueando o cron, apenas inclui o IP e liberei acesso. Ai meu deus
mas aproveitando apenas para não perder o post, mesmo usando esse código acima, ele esta correto? Ou usei muita ganbiarra?
Hehe, que bom que deu certo!
>
13 horas atrás, biakelly disse:
mas aproveitando apenas para não perder o post, mesmo usando esse código acima, ele esta correto? Ou usei muita ganbiarra?
Acredito que esteja ok sim, apenas acho que você deveria rodar as crons em um servidor e não na sua máquina local.
Na AWS você poderia rodar de graça por 1 ano inteiro essas crons (depois pode criar uma conta nova e aproveitar outro ano :P).
Para isso você iria criar uma instância no EC2 chamado t2.micro, que possui 1gb de ram e 1 vCPU.
https://aws.amazon.com/pt/ec2/instance-types/
Poderia ser manualmente pelo EC2 ou através do Elastic Beanstalk (que cria a máquina EC2 para você de forma automática e coloca seu código pra rodar). Vale a pena dar uma olhada nesses serviços.
Oi @Matheus Tavares tudo bem?
Hoje estou congelada que frio senhor.
De graça? Vou testar servidores são tão caros que se esse for interessante vou usar sim hi hi
Muito obrigada pela dica, vou fazer agora o cadastro
Olá @biakelly, tudo bem? :)
1 - Geralmente você precisa reiniciar o servidor de cron para que suas alterações sejam efetivadas.
Acho que no ubuntu você faz com o systemctl, então seria isso:
systemctl restart seu software de cron
Onde o software pode ser: cron, dcron, cronie, fcron, anacron.
Eu particularmente uso o cronie na minha máquina e nunca tive problemas, mas já utilizei outras em máquinas com diferentes sistemas. O procedimento não é diferente.
Você pode desinstalar sua implementação de cron e instalar uma nova para testar também.
2 - Utilize o comando crontab -e para fazer a definição das suas tarefas. crontab -l para listá-las. Você não deve precisar mais do que esses 2 comandos e a reinicialização do serviço.
Veja: https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-ubuntu-1804-pt
3 - E por fim, a tarefa cron não deveria estar na sua máquina local, mas no seu servidor. Sua máquina é para desenvolvimento. Você deveria poder desligá-la e saber que suas tarefas continuam rodando. Quem deve fazer a execução dos scripts é o seu servidor.
Se o seu servidor é cPanel, se não me engano geralmente há uma seção do painel destinada apenas para isso, de forma gráfica, sem necessidade de comandos de terminal.
E você não deve usar o curl, pois ao fazer isso você cria uma requisição, e isso chama o servidor web, que torna tudo mais lento e consome mais recursos de máquina.
Certa vez desenvolvi um sistema de disparo de e-mails que estava muito lento. Resolvi com algumas leves mudanças, mas a principal foi essa.
Você deveria criar suas crons mais ou menos assim:
/30 * /usr/bin/php /home/bia/cronjobs/aquivo1.php > /home/bia/log_arquivo1.log
* /usr/bin/php /home/bia/cronjobs/aquivo2.php > /home/bia/log_arquivo2.log
* /usr/bin/php /home/bia/cronjobs/aquivo3.php > /home/bia/log_arquivo3.log
* /usr/bin/php /home/bia/cronjobs/aquivo4.php > /home/bia/log_arquivo4.log
* /usr/bin/php /home/bia/cronjobs/aquivo5.php > /home/bia/log_arquivo5.log
Isso se for para rodar diretamente na sua máquina.
Observe que /usr/bin/php é o caminho do binário do php. Você pode descobrir esse caminho rodando no seu terminal isso: which php. Daí você substitui pelo caminho que coloquei ali, que é o meu caso, mas pode ser diferente do seu.
Em um cPanel o comando seria diferente e o caminho do seu arquivo php também.
Perceba que defini um caminho para registro dos logs. Você deve verificar se esse arquivo está sendo criado.
Se os arquivos de log estiverem sendo criados, sua cron está rodando, mas provavelmente está ocorrendo algum erro no seu PHP. Isso o log vai dizer.
Lembre-se de que para o PHP exibir os erros, você precisa habilitá-los, com error_reporting( E_ALL );
Ao fazer isso >/dev/null 2>&1, você estava descartando os logs, que são importantes para verificar se tudo está rodando como esperado.