我有一个脚本文件,它可以从命令行正常运行,即:
./escript_file
它是cron友好的,所有路径都是显式的,但是当我运行它时,它无法编译,说有bad attributes
。
有问题的错误属性是宏定义:
-define(COOKIE, 'somecookie').
- 答案**
多亏了Geoff Ready的建议,我通过输出init:script_id()
(输出类似{"OPT APN 181 O1", "R13B"}
的字符串)调查了Erlang的哪个版本正在运行,果然命令行和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条答案
按热度按时间qlckcl4x1#
也许cron在路径中拾取了不同版本的erlang。Erlang R12B documentation表示escript忽略了include_lib之外的预处理器指令。Erlang R13B documentation表示预处理器在文件上运行。这肯定可以解释行为上的差异。
6g8kf2rb2#
如果它在命令行中运行正常,则可能的原因是交互式shell的环境变量与cron运行脚本时的环境变量不同。
rfbsl7qr3#
如果Erlang版本相同,则在文件顶部将
#!/usr/bin/env escript
更改为#!/usr/local/bin/escript
将有效。