Erro estranho com Curl quando executado pelo Cron [RESOLVIDO]

1. Erro estranho com Curl quando executado pelo Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 19/09/2017 - 17:05h

Olá pessoal,

tenho um script que atualiza meu IP no CloudFlare sempre que o mesmo altera, este script roda no Cron a cada 5 minutos e somente se o IP mudou que ele segue a rotina.
Porém quando o script é executado pelo Cron não da certo, somente se eu executar ele manualmente que atualiza meu IP no CloudFlare.


#!/bin/sh
auth_email="meu_email"
auth_key="minha_key"
zone_name="meudominio.com"
record_name="zonaaatualizar.meudominio.com"
zone_identifier=$(curl -k -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | cut -f 3 -d: | cut -f 1 -d, | sed 's/"//g')
record_identifier=$(curl -k -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | cut -f 3 -d: | cut -f 1 -d, | sed 's/"//g')
GETcloudflare=`/usr/local/bin/./curl -k -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$IPATUAL\"}"`
sendmail.sh $GETcloudflare


Quando executado pelo Cron tenho este retorno (deu errado):
{"success":false,"errors":[{"code":7003,"message":"Could not route to \/zones\/dns_records, perhaps your object identifier is invalid?"},{"code":7000,"message":"No route for that URI"}],"messages":[],"result":null} 


Quando executado manualmente tenho este retorno (que deu certo):

{"result":{"id":"xyz","type":"A","name":"zonaaatualizar.meudominio.com","content":"meu_IP_novo","proxiable":true,"proxied":false,"ttl":1,"locked":false,"zone_id":"xxxxxxxxxxxxx","zone_name":"meudominio.com","modified_on":"2017-09-19T19:51:39.603023Z","created_on":"2017-09-19T19:51:39.603023Z","meta":{"auto_added":false}},"success":true,"errors":[],"messages":[]}


Bom não sei se alguém aqui pode me dar uma dica, o forum do Cloudflare ironicamente não tem como abrir um tópico se não for usuário participativo, porém não tenho conhecimento para ajudar ninguém lá então caí num loop...


  


2. Re: Erro estranho com Curl quando executado pelo Cron [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/09/2017 - 17:28h

Onde você ajusta o valor da variável IPATUAL?


3. Re: Erro estranho com Curl quando executado pelo Cron [RESOLVIDO]

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 19/09/2017 - 17:30h

paulo1205 escreveu:

Onde você ajusta o valor da variável IPATUAL?


Opa esqueci desta linha:
IPATUAL="`wget -O - http://myip.dnsomatic.com/`";

é porque este script é grande ele faz atualização de outras coisas então colei aqui somente a parte do codigo que corresponde ao problema.

grato


4. Re: Erro estranho com Curl quando executado pelo Cron [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 19/09/2017 - 17:37h

Fácil. Debugue a parada!

Modifique, no começo do seu script, a linha #!/bin/sh por #!/bin/sh -x. No cron, redirecione toda saída de erro e saída padrão para um arquivo qualquer. Ex.:


5 0 * * * /caminho/script.sh >> arquivo.log 2>&1


Olhe lá q vc vai saber o q tá rolando. Lembre-se d q o cron tem seu ambiente próprio de variáveis, portanto, talvez vc precise inserir isso no seu script.
--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh


5. Re: Erro estranho com Curl quando executado pelo Cron

Daniel P. L. Almeida
daniel.uramg

(usa Outra)

Enviado em 19/09/2017 - 18:18h

renato_pacheco escreveu:
Fácil. Debugue a parada!

Opa renato_pacheco valew meu brother, problema resolvido!

Bom não consegui debugar como vc sugeriu pois o retorno no log ficou bem "poluído" de outras informações que o script retorna, mas depois da sua dica fui analisando minuciosamente e percebi uma diferença no método de execução dos parâmetros, enquanto os que requisitam o zone_identifier e record_identifier são executadas $(curl...) a última chama todo o caminho do curl (bom percebe-se que não entendo muito, o que sei de programação vou aprendendo conforme a necessidade)

Eu havia aproveitado partes de outros scripts, pelo Cron ele não reconhece se não chamar o Curl pelo caminho completo, então quando ele era executado pelo Cron me retornava o erro vindo do CloudFlare pois esta última variavel conseguia requisitar o servidor, no entanto ela não passava os parametros necessários das variáveis anteriores pois o Cron não enconrtou o Curl.
Bastou eu corrigir para chamar o curl para o caminho completo onde ele se encontra que ta redondo agora!


zone_identifier= $(/usr/local/bin/./curl -k -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | cut -f 3 -d: | cut -f 1 -d, | sed 's/"//g')
record_identifier=$(/usr/local/bin/./curl -k -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | cut -f 3 -d: | cut -f 1 -d, | sed 's/"//g')
GETcfIdeias= $(/usr/local/bin/./curl -k -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier"-H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$IPATUAL\"}")


grato, abçs.



6. Re: Erro estranho com Curl quando executado pelo Cron [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 19/09/2017 - 22:13h

Justamente isso! Ele não reconhece o caminho completo pq a variável PATH não estava configurada no ambiente do cron. O debug facilita muito pra identificar o problema.
--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts