Pregunta

Tengo un escript archivo que se ejecuta bien desde la línea de comandos, es decir:

./escript_file

Está destinado a ser cron amable y todos los caminos son explícitos, pero cuando lo ejecuto, se produce un error al compilar diciendo que hay bad attributes.

La mala atributos en cuestión son las definiciones de macro:

-define(COOKIE, 'somecookie').

La Respuesta

Gracias a Geoff Listo sugerencia he investigado que la versión de Erlang fue corriendo por la impresión init:script_id() que imprime una cadena como {"OPT APN 181 O1", "R13B"} y, efectivamente, el de la línea de comandos y cron versiones fueron recogiendo diferentes versiones.

El guión tuvo una primera línea:

#!/usr/bin/env escript

y el sistema operativo 'encontrar' Erlang para mí.Las diferentes variables de entorno de cron significaba que un erlang estaba siendo recogido (Geoff primera respuesta, y yo algo sabía pero no podía ver cómo afectaría a las cosas).

La solución es, entonces, la fuerza de la versión con una línea de partida de:

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

Postscript

También hubo una diferente Ubuntu apt-get instalación de una versión anterior de Erlang (en una ubicación diferente a la de origen de la instalación) y un errante de 64 bits instalar...

El cron medio ambiente sólo seguía cayendo a más y más oscuro, se instala, en su defecto todo el rato :(

¿Fue útil?

Solución

Tal vez cron es recoger una versión diferente de Erlang en el camino. Erlang R12b documentación dice que ignora Escript preprocesador directivas, además de include_lib. Erlang R13B documentación dice que el preprocesador se ejecuta en el archivo. Eso sería sin duda explicar la diferencia en el comportamiento.

Otros consejos

Si se está trabajando muy bien desde la línea de comandos, la causa más probable es una diferencia en variables de entorno del intérprete de comandos interactivo frente al cron ejecuta el script.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top