esrcript cron blues

У меня есть файл escript, который отлично работает из командной строки, а именно:

./escript_file

Он предназначен для cron-friendly и все пути явные, но когда я запускаю его, он не компилируется, говоря, что есть bad attributes,

Плохие атрибуты, о которых идет речь, - это определения макросов:

-define(COOKIE, 'somecookie').

Ответ

Благодаря предложению Джеффа Рида я выяснил, какая версия Erlang была запущена, распечатав init:script_id() который печатает строку как {"OPT APN 181 O1", "R13B"} и, конечно же, версии командной строки и cron собирали разные версии.

Скрипт имеет начальную строку:

#!/usr/bin/env escript

и операционная система "находила" Эрланга для меня. Различные переменные окружения cron означали, что был выбран другой эрланг (первый ответ Джеффа, который я вроде знал, но не мог понять, как это повлияет на ситуацию).

Решение состоит в том, чтобы заставить версию с начальной строки:

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

постскриптум

Был также другой Ubuntu apt-get установка более ранней версии Erlang (в другом месте, чем исходная установка) и ошибочная 64-битная установка...

Среда cron просто возвращалась к более старым и более неясным установкам, терпя неудачу все время:(

2 ответа

Решение

Возможно, cron выбирает другую версию erlang на пути. В документации Erlang R12B говорится, что escript игнорирует директивы препроцессора, кроме include_lib. В документации Erlang R13B говорится, что препроцессор запускается для файла. Это определенно объясняет разницу в поведении.

Если он работает нормально из командной строки, вероятной причиной является разница переменных среды для вашей интерактивной оболочки по сравнению с тем, когда cron запускает скрипт.

Изменение #!/usr/bin/env escript к #!/usr/local/bin/escript вверху файла будет работать, если версии Erlang совпадают.

Другие вопросы по тегам