2014-09-01 6 views
0

я запустить программу на языке Perl, как в Deamon, Perl check.pl &Как запустить программу perl автоматически при запуске программы perl?

теперь я могу проверить программу на языке Perl рабочего состояния, но, как изменить скрипт для запуска программы на языке Perl, когда программа ISN Perl Не бегаете?

a=`ps -ef | grep "perl" | grep "check" |awk '{print $2}'` 
    for p in $a 
    do 
     echo perl 
     echo $p 
    done 
+0

вы могли бы использовать cronjob проверять каждые п минут, если ваша программа работает, и если не перезапустить его. , но для этого вы должны сделать его настоящим системным демоном. Daemon :: Control - это модуль perl, который помогает в создании такого демона. вероятно, есть альтернативы, но это тот, который я использую в течение некоторого времени. Чего вы хотите достичь? – davewood

+0

У вас есть привилегии root/admin? – AnFi

ответ

1

Так,

  • я запустить программу на языке Perl, как Deamon, perl check.pl &

Это, некак демона, но простой фоновый процесс. У каждого процесса есть родительский процесс. Фоновый процесс (как и выше) имеет в качестве родителя «bash» то, что отправляет его в bakcground, поэтому bash может wait для его завершения. Демон имеет родительский процесс, который называется init, с PID == 1, и поэтому он просматривается init.

  • теперь я могу проверить перл программа работает состояние,

Да, как вы можете проверить состояние любой другой программы. Один комментарий, делая такой grep на названия программ coukd имеют некоторые странные побочные эффекты, такие как:

$ perl log.pl & 

Теперь оглавлению выход ps приведет к двум, «войти» процессы, которые один из них будет syslogd процесс. Конечно, youre в вашем примере ограничил это еще одним grep до perl, но ценой двух процессов.

Вы можете ограничить два процесса в один, используя некоторые умнее Grep аргумент, как

ps -ef | grep 'perl check' 

выше будет искать с одним процессом, строку «Проверка PERL». К сожалению, это будет найти сам grep процесс, как

$ perl check.pl & 
$ ps -ef | grep 'perl check 
    501 45063 42171 0 11:26 ttys001 0:00.00 grep perl check 
    501 45002 44504 0 11:21 ttys002 0:00.02 perl check.pl 

Один хороший обходного использует жала как

grep '[p]erl check' 

как

$ perl check.pl & 
$ ps -ef | grep '[p]erl check' 
    501 45002 44504 0 11:21 ttys002 0:00.02 perl check.pl 
  • , но как изменить оболочку сценарий для запуска программы perl, когда программа perl не запущена?

Если в Outout оглавлению из ps возвращает ничего, вы должны начать сценарий. Вы должны проверить содержимое своего a (вам действительно следует назвать его как a, например perlPID или тому подобное). Если длина аргумента -z равна нулю, то она возвращает «истина», так:

[[ -z "$a" ]] && perl check.pl & 
1

Вы можете оставить работает проверку на PERL себя, и вызвать его на регулярной основе с помощью системы кронтаб,

use Fcntl ':flock'; 
flock(DATA, LOCK_EX|LOCK_NB) or die "Already running..\n"; 

# ... 


__DATA__