perl脚本调用OpenEdge应用程序导致错误:无法查找boot_DynaLoader符号



作为AWS迁移的一部分,我们将应用程序托管在EC2实例(Amazon Linux 2, 64位)上,在操作系统级别上使用Perl 5.16.3。我们已经创建了一个Perl脚本,作为发送特定于应用程序的电子邮件的操作系统shell命令调用。将使用Amazon SES发送电子邮件,脚本是根据Amazon SES文档中提供的指南创建的。该脚本将与安装在操作系统级别的Perl版本一起使用,我们有"shebang";指向"/usr/bin/perl"。

我们通过从Procedure编辑器和特定于应用程序的"sudo"调用相同的脚本来测试该脚本。用户和根。所有这些情况都有效,我们尝试从应用程序中做同样的事情,我们有错误"/usr/bin/perl:符号查找错误:/usr/bin/perl:未定义的符号:boot_DynaLoader". 我们也试过调用简单的脚本来显示来自应用程序的示例消息,但是我们有同样的错误。

在分析中,我们可以看到应用程序使用OE 11.7.8和Perl 5.6.1。我们还尝试对PATH进行优先级排序,以便专门使用"/usr/bin"(当存在操作系统级别的Perl时)&"/usr/lib64/perl5"(其中包含所需的库文件),同时从shell调用脚本。(设置PATH并在调用前导出)

我们怀疑这个错误是由于应用服务器调用对特定于OE的Perl二进制文件的一些依赖,我们尝试修改shebang以在DLC路径中使用特定于OE的Perl和"boot_DynaLoader"错误被更改,我们无法使用此更改的任何特定库文件。我们还尝试更新proadsv文件中的PATH环境变量,并重新启动所有app/web/db/AdminServers。路径仍被重置为Old one。

我们想知道

  1. 为什么我们不能调用特定于安装在操作系统级别的Perl脚本?
  2. 我们可以有一个Perl 5.16.3或最新版本的OE补丁吗?
  3. 是否有可能在没有补丁及其影响的情况下更新DLC中的Perl ?

我从Progress support那里得到了更新LD_LIBRARY_PATH环境变量的响应。我在脚本调用之前做了下面的语句,它工作了。

export LD_LIBRARY_PATH=/usr/lib64/perl5:/usr/lib64/perl5/CORE/:/usr/share/perl5:$LD_LIBRARY_PATH

我发现在类似的情况下下面的代码很有用:

PROVERSION=`cat $DLC/version | awk '{print $3}' | awk -F. '{print $1}'`
if [ $PROVERSION = "12" ]
then
PERL5LIB="$DLC/perl/lib/5.26.1"
else
PERL5LIB="$DLC/perl/lib/5.6.1"
fi
export PERL5LIB

(在开始OpenEdge会话之前,我在包装器脚本中运行此脚本)

最新更新