我有一个从命令行运行良好的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环境不断回落到更老,更隐蔽的安装,一直失败:(
答案 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
即可。