esrcript cron blues

时间:2010-01-22 22:30:01

标签: cron erlang erlang-escript

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

./escript_file

它应该是cron友好的并且所有路径都是显式的,但是当我运行它时,它无法编译说有bad attributes

有问题的不良属性是宏定义:

-define(COOKIE, 'somecookie').

答案

感谢Geoff Ready的建议,我通过打印init:script_id()调查了哪个版本的Erlang正在运行,打印出类似{"OPT APN 181 O1", "R13B"}的字符串,而且命令行和cron版本确实提供了不同的版本

该脚本有一个初始行:

#!/usr/bin/env escript

并且操作系统正在为我找到Erlang。 cron的不同环境变量意味着正在拾取不同的erlang(Geoff的第一个答案,我有点知道但却看不出它会如何影响事物)。

然后解决方案是使用起始行强制版本:

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

后记

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

cron环境不断回落到更老,更隐蔽的安装,一直失败:(

3 个答案:

答案 0 :(得分:3)

如果从命令行运行正常,可能的原因是交互式shell的环境变量与cron运行脚本时的差异。

答案 1 :(得分:2)

也许cron在路径中选择了不同版本的erlang。 Erlang R12B documentation表示除了include_lib之外,escript会忽略预处理程序指令。 Erlang R13B documentation表示预处理器在文件上运行。这肯定可以解释行为上的差异。

答案 2 :(得分:0)

如果Erlang版本相同,将文件顶部的#!/usr/bin/env escript更改为#!/usr/local/bin/escript即可。