2014-05-09 84 views
2

我已經使用不同的代碼片段來構建,其上AWS EC2的Linux AMI運行perl腳本不斷

  1. 監聽傳入TCP數據(使用Perl腳本)的端口的系統中,該數據寫入日誌文件。
  2. 呼叫並運行PHP腳本消耗日誌文件,並將其寫入到一個RDS MySQL數據庫

我必須配置爲將數據發送到我的AWS EC2服務器的彈性IP GPS設備

它工作正常,當我通過SSH

perl portlistener.pl 

運行它,它的工作很好,快樂地工作了。

我可以停止腳本運行的唯一方法是關閉終端窗口,結束我的SSH會話。我需要做的是始終保持運行狀態,並實施啓動,停止和重啓設施。我需要創建一個守護進程嗎?

我知道PHP,但直到現在,從來沒有與Perl合作過。我也不是那麼熟悉命令行,除了安裝更新,導航和編輯單個文件等。

在此先感謝您的幫助,或者爲我指出正確的方向。

+1

看看[守護 - 控制(HTTPS: //metacpan.org/pod/Daemon::Control)。 –

+0

解決了它我認爲使用Deamon ::控制 – bluehatfish

+0

是的,我試過了,但它不會讓我自己在一定的時間限制內回答它 – bluehatfish

回答

0

如果終端窗口是唯一的任務,您可以使用nohup命令,例如, http://linux.101hacks.com/unix/nohup-command/ 要終止偵聽器,您可以殺死一個或多個適當的正在運行的進程。

守護程序的實現並不能確保其永久運行。它可能會崩潰或可能會被某人殺死。爲了保證永久守護進程的運行,您必須實施對守護進程的全天候監視並自動重新啓動它。

1

解決了它我認爲!

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

使用CPAN,安裝DEAMON ::控制

然後創建一個新的程序如下(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