erlang 脚本cron blues

7ajki6be  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(173)

我有一个脚本文件,它可以从命令行正常运行,即:

./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环境只是不断地退回到更旧和更模糊的安装,一直失败:(

qlckcl4x

qlckcl4x1#

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

6g8kf2rb

6g8kf2rb2#

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

rfbsl7qr

rfbsl7qr3#

如果Erlang版本相同,则在文件顶部将#!/usr/bin/env escript更改为#!/usr/local/bin/escript将有效。

相关问题