2013-05-13 6 views
0

В настоящее время я пытаюсь запустить скрипт perl, который должен запускаться все время при запуске.Запуск скрипта perl при запуске

Я работаю на сервере CentOS.

Я добавил эту строку в /etc/rc.d/rc.local и сценарий не будет запускаться, пока он работает, когда я набираю ту же строку из консоли:

perl /svcmon/bin/svcperf.pl --svc fav01svc --interval 5 >> /dev/null & 

Этот скрипт на самом деле предполагается, будет запущен, и вы должны ждать, как много времени, как вы хотите, вставленные ДАННЫХ в базе данных, но добавление

>> /dev/null/& 

позволяет продолжать использовать машину в то время как скрипт работает в фоновом режиме.

Я не знаю, что я мог сделать, потому что я не понимаю, почему это не работает ...

У вас есть представление о том, что я мог бы попробовать?

EDIT: Получается, что мне удалось запустить мой сценарий правильно, делая это:

nohup /usr/bin/perl /svcmon/bin/svcperf.pl --svc fav01svc --interval 5 > /outputsvcperf.txt &

, но он не работает, потому что сервер PostgreSQL не запускается во времени, а это, как предполагается, будет запущен при запуске и до моего PERL скрипт ...

+1

Попробуйте указать полный путь к 'perl', обычно'/usr/bin/perl'. – choroba

+0

Подготовить 'exec'. –

+0

@choroba: Спасибо, я сделал это, но он все еще не работал. – user2377141

ответ

1
  1. в вашей оболочке Unix (где работает команда) введите команду: «which perl»

    Это даст выход, дающий полный путь к бинарнику perl. Скажем, например, он возвращает «/bin/perl»

  2. В вашем скрипте rc.local измените «perl your-command» на «/ bin/perl your-command» (в основном замените Perl на полностью квалифицируемое имя). (hat/tip @choroba для заметок в комментариях).

    Это потому, что в командной строке у вас установлена ​​$PATH, которая позволяет вашей оболочке Unix находить команды, которые находятся в пути. Когда запускаются RC-скрипты, у них нет установки PATH для них оболочкой и, следовательно, не знают, где искать комманды.

  3. Кстати, это скорее всего НЕ проблема, но смените «>>/dev/null» на «>/dev/null». Вы не добавляете к нулевому устройству, вы его выводите.

Ссылки:

+0

Спасибо за ваш ответ, я попробовал то, что вы сказали, но сценарий по-прежнему не запускается при запуске. Я не вижу его во время работы 'ps aux', и моя база данных не заполняет себя ... Я изменил' perl' на 'usr/bin/perl', и я не знаю, почему он все еще не work ... – user2377141

+0

@ user2377141 измените его на '/ your/path/perl /svcmon/bin/svcperf.pl --svc fav01svc --interval 5> /tmp/mylog.txt 2> & 1 &' и сообщите нам, что log говорит – DVK

+0

Хорошо, я сделал это, и журнал говорит, что сценарий должен сказать при запуске. Дело в том, что когда я запускаю скрипт, он что-то говорит о запуске и никогда ничего не говорит после этого, пока он все еще работает. Поэтому я думаю, что сценарий запускается, но выходит сразу после. – user2377141

0

Хорошо, вот трюк:

Я создал скрипт whic h запускает мою командную строку и помещает ее в crontab моего корня, поэтому он всегда проверяет, работает ли скрипт, и запускает его, если нет.

Вот код:

#!/usr/bin/php 
<?php 

    $resultat = shell_exec("ps aux | grep perl"); 
    if(preg_match("/svcperf.pl/", $resultat)){ 
     echo "Service déjà en route."; 
    }else{ 
     echo "Service non lancé."; 
     echo "\nDémarrage..."; 
     shell_exec("/usr/bin/perl /svcmon/bin/svcperf.pl --svc fav01svc --interval 5 > /dev/null &"); 
    } 

?> 

Спасибо за помощь.

Смежные вопросы