不断在AWS EC2 linux AMI上运行perl脚本

时间:2014-05-09 15:50:50

标签: linux perl amazon-web-services amazon-ec2 daemon

我使用了各种代码片段来构建一个

的系统
  1. 侦听传入TCP数据的端口(使用perl脚本),将此数据写入日志文件。
  2. 调用并运行PHP脚本以使用日志文件并将其写入RDS MySQL数据库
  3. 我将GPS设备配置为将数据发送到我的AWS EC2服务器的弹性IP

    它工作正常,当我通过SSH运行时

    perl portlistener.pl
    

    它的工作做得很好,快乐地工作。

    我可以停止脚本运行的唯一方法是关闭终端窗口,结束我的SSH会话。我需要做的是,让它始终保持运行,并实现启动,停止和重启设施。我需要创建一个守护进程吗?

    我知道PHP,但到目前为止从未使用过Perl。除了安装更新,导航和编辑单个文件等之外,我对命令行也不熟悉。

    提前感谢您的帮助,或者指出我正确的方向。

2 个答案:

答案 0 :(得分:1)

我想解决了!

已安装CPAN http://www.thegeekstuff.com/2008/09/how-to-install-perl-modules-manually-and-using-cpan-command/

使用CPAN,安装了Deamon :: Control

然后创建一个新程序如下(portlistener_launcher.pl),并将其作为SU运行。

#!/usr/bin/perl
use strict;
use warnings;
use Daemon::Control;

$ENV{PHP_FCGI_CHILDREN} = 10;
$ENV{PHP_FCGI_MAX_REQUESTS} = 1000;

Daemon::Control->new({
    name => 'portlistener',
    program => 'perl /home/ec2-user/portlistener/portlistener.pl',
    fork => 2,
    pid_file => '/var/run/portlistener.pid',
    stdout_file => '/var/log/portlistener.log',
    stderr_file => '/var/log/portlistener.log',

})->run;

这可能是一种更简洁的方式,但它似乎有效,我可以像这样停止/启动它:

perl portlistener_launcher.pl start

答案 1 :(得分:0)

如果终端窗口是唯一的任务,则可以使用nohup命令,例如: http://linux.101hacks.com/unix/nohup-command/ 要终止侦听器,您可以终止正常运行的进程。

守护程序的实现不能确保其永久运行。它可能会崩溃或可能会被某人杀死。要保证永久守护程序运行,您必须对此守护程序实施全天候监视并自动重新启动它。