Вопрос

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

./escript_file

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

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

-define(COOKIE, 'somecookie').

Ответ

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

В скрипте была начальная строка:

#!/usr/bin/env escript

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

Тогда решение состоит в том, чтобы принудительно использовать версию с начальной строкой:

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top