守护进程

时间:2016-10-31 19:26:25

标签: perl dependencies export daemon

我目前正在尝试正确设置守护程序以在远程计算机上运行任务。问题是,我可以正确地手动启动命令,但是当它由守护程序启动时,它将无法工作,因为尚未设置环境变量。

在手动使用我的命令之前,我必须这样做:

sudo -s 
export HOME=/home/tim
cd ~
export PERL5LIB=/usr/local/my/lib
export PATH=/my/path/to/tools/bin

然后我运行我的命令。所以我怀疑如果守护进程没有设置它将无法工作。我怎么能用守护进程做到这一点或摆脱依赖?

也许有一个临时文件夹?不确定。

1 个答案:

答案 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