esrcript cron blues
-
22-09-2019 - |
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 :(
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.