【问题标题】:Periodically check if it is necessary to restart a process with Crontab and Perl定期检查是否需要使用 Crontab 和 Perl 重新启动进程
【发布时间】:2013-12-19 13:34:42
【问题描述】:

我用 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

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

【问题讨论】:

  • 也许可以考虑将它放在 inittab 中,以便它自动重生。
  • 检查非阻塞排他文件锁;它不依赖于外部命令并且是可移植的。
  • 与其用自己的进程观察器重新发明轮子,不如看看现有的一个,它解决了所有挂起进程的边缘情况,如 systemd、runit、daemontools、god、monit、 ...如今,您的发行版应该至少附带其中一个(甚至可能默认使用它)。

标签: perl unix process crontab


【解决方案1】:

一个简单的解决方案是删除命令中的完整路径并在执行命令之前执行“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 &`;
}

【讨论】:

猜你喜欢
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多