Pergunta

Eu tenho um arquivo escript que funciona bem na linha de comando, ou seja:

./escript_file

Ele foi projetado para ser compatível com cron e todos os caminhos são explícitos, mas quando eu o executo, ele não consegue compilar dizendo que existem bad attributes.

Os atributos ruins em questão são definições de macro:

-define(COOKIE, 'somecookie').

A resposta

Graças à sugestão de Geoff Ready, investiguei qual versão do Erlang estava rodando imprimindo init:script_id() que imprime uma string como {"OPT APN 181 O1", "R13B"} e, com certeza, a linha de comando e as versões do cron estavam escolhendo versões diferentes.

O script tinha uma linha inicial:

#!/usr/bin/env escript

e o sistema operacional estava 'encontrando' Erlang para mim.As diferentes variáveis ​​de ambiente do cron significavam que um erlang diferente estava sendo escolhido (a primeira resposta de Geoff, e uma que eu conhecia, mas não conseguia ver como isso afetaria as coisas).

A solução é então forçar a versão com uma linha inicial de:

#!/usr/local/lib/erlang/erts-5.7.3/bin/escript

Pós-escrito

Havia também um Ubuntu diferente apt-get instalação de uma versão anterior do Erlang (em um local diferente da instalação de origem) e uma instalação incorreta de 64 bits...

O ambiente cron continuava voltando para instalações mais antigas e obscuras, falhando o tempo todo :(

Foi útil?

Solução

Talvez o cron esteja escolhendo uma versão diferente do erlang no caminho. Documentação Erlang R12B diz que o escript ignora as diretivas do pré-processador além de include_lib. Documentação Erlang R13B diz que o pré-processador é executado no arquivo.Isso definitivamente explicaria a diferença de comportamento.

Outras dicas

Se estiver funcionando bem na linha de comando, uma causa provável é uma diferença nas variáveis ​​de ambiente do seu shell interativo em comparação com quando o cron executa o script.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top