2

我有一个从命令行运行良好的 escript 文件,即:

./escript_file

它意味着对 cron 友好,并且所有路径都是明确的,但是当我运行它时,它无法编译说有bad attributes.

有问题的坏属性是宏定义:

-define(COOKIE, 'somecookie').

答案

感谢 Geoff Ready 的建议,我通过打印出哪个版本的 Erlang 来调查正在运行的 Erlang,init:script_id()它打印出类似的字符串,{"OPT APN 181 O1", "R13B"}并且果然命令行和 cron 版本正在选择不同的版本。

该脚本有一个初始行:

#!/usr/bin/env escript

操作系统正在为我“寻找”Erlang。cron 的不同环境变量意味着正在选择不同的 erlang(Geoff 的第一个答案,我有点知道但看不出它会如何影响事情)。

然后解决方案是强制版本具有以下起始行:

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

后记

还有一个不同的 Ubuntuapt-get安装了早期版本的 Erlang(在与源安装不同的位置)和一个错误的 64 位安装......

cron 环境只是不断退回到较旧且更晦涩的安装,一直失败:(

4

3 回答 3

3

如果它在命令行中运行良好,一个可能的原因是交互式 shell 的环境变量与 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 escriptto将起作用。#!/usr/local/bin/escript

于 2020-06-20T23:30:24.413 回答