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 совпадают.