2

コマンドラインから正常に実行されるescriptファイルがあります。

./escript_file

これはcronに適したものであり、すべてのパスは明示的ですが、実行するとコンパイルに失敗し、bad attributes.

問題の悪い属性はマクロ定義です:

-define(COOKIE, 'somecookie').

答え

Geoff Ready の提案のおかげで、コマンド ラインと cron のバージョンが異なるバージョンを取得していることは確かでしたinit:script_id(){"OPT APN 181 O1", "R13B"}

スクリプトには次の最初の行がありました。

#!/usr/bin/env escript

オペレーティングシステムは私のためにErlangを「見つけて」いました。cron のさまざまな環境変数は、別の erlang が選択されたことを意味します (Geoff の最初の回答であり、私はちょっと知っていましたが、それがどのように影響するかはわかりませんでした)。

解決策は、次の開始行でバージョンを強制することです。

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

あとがき

Erlang の以前のバージョンの別の Ubuntuapt-getインストール (ソース インストールとは別の場所) と、誤った 64 ビット インストールもありました...

cron環境は、古くて目立たないインストールにフォールバックし続け、その間ずっと失敗していました:(

4

3 に答える 3

3

コマンド ラインから正常に動作している場合、対話型シェルの環境変数と cron がスクリプトを実行するときの環境変数の違いが原因である可能性があります。

于 2010-01-22T22:43:29.440 に答える
3

おそらく、cron はパスで異なるバージョンの erlang を取得しています。Erlang R12B のドキュメントには、escript は include_lib 以外のプリプロセッサ ディレクティブを無視すると書かれています。Erlang R13B のドキュメントには、プリプロセッサがファイルで実行されると記載されています。それは間違いなく動作の違いを説明します。

于 2010-01-22T23:33:19.520 に答える
0

Erlang のバージョンが同じであれば、ファイルの先頭を変更#!/usr/bin/env escriptしても機能します。#!/usr/local/bin/escript

于 2020-06-20T23:30:24.413 に答える