2010-01-22 3 views
1

내가 명령 줄에서 잘 실행되는 escript 파일, 즉이 : 친화적 인 크론 될 운명과 모든 경로는 명시 적 있지만 나는 그것을 실행할 때, 그것은 컴파일 실패esrcript 크론 블루스

./escript_file 

bad attributes이 있다고 말합니다. 내가 문자열을 출력 init:script_id()을 인쇄하여 실행중인 얼랑의 버전을 조사 제프 준비의 제안에

감사

-define(COOKIE, 'somecookie'). 

답은

문제의 나쁜 속성

매크로 정의입니다 {"OPT APN 181 O1", "R13B"}처럼, 커맨드 라인과 cron 버전이 다른 버전을 선택하기에 충분했습니다.

스크립트

초기 라인했다 :

#!/usr/bin/env escript 

을 운영 체제 나에게 '발견'얼랑했다. cron의 다른 환경 변수는 다른 Erlang이 선택되었다는 것을 의미합니다 (Geoff의 첫 번째 대답, 그리고 나는 다소 알고 있었지만 어떻게 영향을 미칠지는 알 수 없었습니다).

또한 다른에서 다른 우분투 apt-get 얼랑 이전 버전의 설치 (있었다

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

추신 :

용액의 시작 라인 버전을 강제 후이고 소스 설치 위치) 및 잘못된 64 비트 설치 ...

cron 환경은 계속해서 더 오래된 설치로 떨어지고 모든 설치에 실패합니다. hile :(

답변

2

아마도 cron은 경로에서 다른 버전의 erlang을 선택하고있을 것입니다. Erlang R12B documentation은 escript가 include_lib 외의 전처리 지시문을 무시한다고 말합니다. Erlang R13B documentation은 전처리 기가 파일에서 실행된다고 말합니다. 그것은 분명히 행동의 차이를 설명 할 것입니다.

+0

실제로 우리는 R11B를 통해 R13B를 설치했으며 escript는 R11B를 선택하고 명령 줄은 R13B를 선택합니다 –

3

명령 줄에서 정상적으로 작동하는 경우 cron이 스크립트를 실행할 때 대 대화 형 셸의 환경 변수와 다를 수 있습니다.

+0

그건 내 첫 번째 생각이었고, cron의 일반적인 문제입니다. 그러나 환경 변수로 인해 코드의 컴파일 부분이 Erlang의 언어 구문 인 정의를 실행하지 못하게하는 원인은 분명하지 않습니다. –