perl - 守护进程的环境变量

标签 perl dependencies export daemon

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

在手动使用我的命令之前,我必须执行以下操作:

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

然后我运行我的命令。所以我怀疑如果守护进程没有设置这个它就不会工作。我如何使用守护进程来做到这一点或摆脱依赖关系?

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

最佳答案

%ENV允许访问和操作环境变量。请参阅Environment in perlrun 。 (为了方便起见,还有一个核心模块 Env。)有了它,我们可以说 print $ENV{HOME},或者通过设置新的哈希键来添加环境变量,或者更改(写入新)值对于现有的。该环境由程序启动的进程继承。

parent 也是如此

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 path in PERL5LIB

print "$ENV{VAR}\n";
func();

可以使用$ENV{VAR},并且可以直接使用安装在为PERL5LIB设置的路径中的模块。

这仅影响您的程序启动的进程。它不会改变其父进程的环境(守护进程不会有这种情况),并且对独立于程序的事物没有影响。

我想补充一点 - 确保您有一个正确的守护进程正在运行。例如,参见 Complete Dissociation of Child from Parent in perlipc 。您还可以查看in perlipc 如何使用SIGHUP

关于perl - 守护进程的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40349189/

相关文章:

c++ - 具有跨 DLL/SO 使用的静态数据成员的模板类

perl - 如何重载 Moose 构造函数?

angularjs - 在 AngularJS 中处理来自子模块的依赖关系

php - 具有依赖项的可测试 Controller

javascript - 如何使用 static 关键字定义带参数的单例模式?

json - 是否可以将 Github 问题跟踪器导出或迁移到另一个跟踪系统

perl - 如何在Perl中找出需求文件的文件名?

perl - 如何在 Perl 对象中存储文件句柄以及如何访问结果?

excel - 使用 Perl 在 Excel 2010 工作表上保存 AsXMLData

cmake 不会在自定义命令中复制文件