我目前正在尝试正确设置守护程序以在远程计算机上运行任务。问题是,我可以正确地手动启动命令,但是当它由守护程序启动时,它将无法工作,因为尚未设置环境变量。
在手动使用我的命令之前,我必须这样做:
sudo -s
export HOME=/home/tim
cd ~
export PERL5LIB=/usr/local/my/lib
export PATH=/my/path/to/tools/bin
然后我运行我的命令。所以我怀疑如果守护进程没有设置它将无法工作。我怎么能用守护进程做到这一点或摆脱依赖?
也许有一个临时文件夹?不确定。
答案 0 :(得分:2)
ListView
哈希允许访问和操作环境变量。见Environment in perlrun。为方便起见,还有一个核心模块Env。我们可以说%ENV
,或者通过设置新的哈希键或者更改(写入新的)现有值来添加环境变量。该环境由程序启动的进程继承。
所以与父母一起
print $ENV{HOME}
名为
的程序use warnings 'all';
use strict;
$ENV{VAR} = '...'; # HOME, PATH, ... or a new variable
$ENV{PERL5LIB} = '...'; # where some modules are installed
system("script.pl");
script.pl
可以使用use warnings 'all';
use strict;
use SomeModule qw(func); # SomeModule is installed in PERL5LIB
print "$ENV{VAR}\n";
func();
,可以直接在$ENV{VAR}
中安装use
个模块。
这仅影响程序启动的进程。它不会改变其父级的环境(守护程序无论如何都不会改变),并且对与程序无关的事物没有影响。
我想添加 - 确保您正在运行正确的守护程序。例如,请参阅Complete Dissociation of Child from Parent in perlipc。您还可以看到in perlipc
如何利用PERL5LIB
。