我正在将以下 systemd 服务文件从旧服务器复制到新服务器。我是 perl 新手,并试图了解服务文件还需要移动哪些内容(除了 /usr/local/assp 内容之外)。
该文件包含 PERL5LIB= 行,我不确定它的作用或是否需要。旧服务器确实在 /root/perl5/lib/perl5 中有文件,但我不确定这是做什么的,而新服务器没有这个目录。旧服务器是CentOS7(perl 5.16.3),新服务器是AlmaLinux9(perl 5.32.1)。我猜这与兼容性有关,但无法弄清楚。
我需要重新创建这个目录吗?我需要更改 PERL5LIB 线吗?
[Unit]
Description=AntiSpam SMTP Proxy
After=network.target
[Service]
Type=
Environment=PERL5LIB=/root/perl5/lib/perl5/
ExecStartPre=-rm -f /usr/local/assp/pid
ExecStart=/usr/bin/perl /usr/local/assp/assp.pl /usr/local/assp/
ExecStopPost=-rm -f /usr/local/assp/pid
[Install]
WantedBy=multi-user.target
答案1
您perl
的程序可以包含诸如use IO;
.这告诉语言要加载到模块中。
有一个默认路径可以找到这些库(您可以使用 来查看perl -V
)。
但是,如果您手动将库放置在这些区域之外(非常常见),那么您需要告诉perl
在哪里可以找到它们。这可以通过修改在代码内部完成@INC
,或者您可以设置PERL5LIB
环境变量(或PERLLIB
就此而言的变量)。
通过设置PERL5LIB=/root/perl5/lib/perl5/
它意味着如果您的程序这样做use xyzzy;
,那么它将查找/root/perl5/lib/perl5/xyzzy.pm
默认位置。
至于你的新环境中是否需要设置这个变量,那就要看什么/usr/local/assp/assp.pl
需要了。我们无法回答这个问题。