perl - 定期检查是否需要使用 Crontab 和 Perl 重新启动进程

标签 perl unix process crontab

我用 perl 写了一个简单的脚本来检查我的服务器是否正在运行。如果不是,脚本将再次启动它。这是脚本:

#!/usr/bin/perl -w
use strict;
use warnings;
my($command, $name) = ("/full_path_to/my_server", "my_server");
if (`pidof $name`){
   print "Process is running!\n";
}
else{    
    `$command &`;
}

当我手动执行脚本时,脚本运行良好,但是当我在 crontab 中运行它时,它无法找到服务器使用的动态库,它们位于同一文件夹中。

Crontab 条目:
*/5 * * * * /usr/bin/perl -w /full_path_to_script/autostartServer

我想这是启动应用程序的上下文的问题。哪个是解决这个问题的聪明方法?

最佳答案

一个简单的解决方案是删除命令中的完整路径并在执行命令之前执行“cd/path”。这样,它将在与库相同的文件夹中启动。代码如下所示:

#!/usr/bin/perl -w

use strict;
use warnings;

my($command, $name) = ("./my_server", "my_server");
if (`pidof $name`)
{
   print "Process is running!\n";
}
else
{    
    `cd /full_path_to`;
    `$command &`;
}

关于perl - 定期检查是否需要使用 Crontab 和 Perl 重新启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20352093/

相关文章:

Perl fork 和kill - Kill(0, $pid) 总是返回1,并且不能杀死子进程

c++ - 在UNIX上 “internal compiler error: storage failure”是什么意思?

dll - 如何查找加载到进程中的 DLL 及其位置等

python - 如何分离从 Pycharm 运行的 python 脚本,以便它不断附加到文件?

perl - 在 Perl 模板工具包中显示时间增量

Perl CGI::Fast 关闭连接而不发送数据

regex - 珀尔 : How to replace a _[0-9] with a comma in perl or any language

regex - 为 html 文件中的所有媒体链接添加前缀

linux - ls -l 和 grep 不能一起工作

c# - 意外的跨线程问题