escript cron-blues

escript cron-blues,cron,erlang,erlang-escript,Cron,Erlang,Erlang Escript,我有一个可以从命令行正常运行的escript文件,即: ./escript_file 它应该是cron友好的,并且所有路径都是显式的,但是当我运行它时,它无法编译,因为有错误的属性 问题中的坏属性是宏定义: -define(COOKIE, 'somecookie'). 答案 由于Geoff Ready的建议,我通过打印出init:script_id()来调查Erlang的哪个版本正在运行,该脚本打印出一个字符串,如{“OPT APN 181 O1”,“R13B”},而且,命令行和cron版本

我有一个可以从命令行正常运行的escript文件,即:

./escript_file
它应该是cron友好的,并且所有路径都是显式的,但是当我运行它时,它无法编译,因为有
错误的属性

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

-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
Postscript

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


cron环境只是不断退回到较旧和更模糊的安装,一直失败:(

如果它在命令行中工作正常,一个可能的原因是交互shell的环境变量与cron运行脚本时的环境变量不同。

也许cron在路径中选择了不同版本的erlang。说escript除了includelib之外,还忽略了预处理器指令。说预处理器是在文件上运行。这肯定可以解释行为上的差异。

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

这是我的第一个想法,这是cron的正常问题。但环境如何工作还不清楚变量可能导致代码的编译部分无法执行define,而define是Erlang中的一种语言构造。事实上,我们已经在R11B上安装了R13B,escript正在接收R11B,命令行正在接收R13B