2016-12-19 10 views
-1

Я хочу создать скрипт, который предотвратит запросы на определенные домены в течение определенного времени, и уничтожит определенные процессы за такое же количество времени.Запуск сценария Perl в фоновом режиме и отправка его команд

Я хотел бы иметь что-то вроде демона, которому я мог бы отправлять команды. Например, чтобы узнать, сколько времени осталось, с some_script timeleft, для запуска демона, который будет создан на что-то вроде some_script start, или добавить новый домен/процесс и т.д.

Что я застрял on is:

  • Как создать демона? Я видел this

  • Я не знаю, как отправить команду на демон из командной строки

Я надеюсь, что я достаточно ясно в моем объяснении.

+1

Почему вы не делаете это на основе HTTP, поэтому вам не нужно изобретать совершенно новый сервер (который далеко за пределами вашего набора навыков прямо сейчас)? – ikegami

+1

@cocosushiTS: вы можете написать свой собственный сервер с нуля или использовать существующие модули для создания HTTP-сервера. – Borodin

+1

@cocosushiTS: вы можете создать свой собственный сервер, используя любую межпроцессную связь, которую вы выберете. Сокеты - это один из способов, но они работают на очень низком уровне, и вам придется составлять простой протокол.Поскольку для реализации HTTP-сервера так много готового программного обеспечения, имеет смысл написать что-то, что будет отвечать на HTTP-запрос, который в основном представляет собой текст – Borodin

ответ

1

я бы, вероятно, использовать кости ответ вы ссылаетесь, но добавляют:

  • обработчик SIGHUP который повторно считывает конфигурационный файл из IP-адресов, чтобы подавить, и,

  • обработчик для SIGUSR1, который сообщает, сколько времени осталось.

Таким образом, это будет выглядеть так примерно:

#!/usr/bin/perl 

use strict; 
use warnings; 
use Proc::Daemon; 

Proc::Daemon::Init; 

my $continue = 1; 
################################################################################ 
# Exit on SIGTERM 
################################################################################ 
$SIG{TERM} = sub { $continue = 0 }; 

################################################################################ 
# Re-read config file on SIGHUP 
################################################################################ 
$SIG{HUP} = sub { 
    # Re-read some config file - probably using same sub that we used at startup 
    open(my $fh, '>', '/tmp/status.txt'); 
    print $fh "Re-read config file\n"; 
    close $fh; 
}; 

################################################################################ 
# Report remaining time on SIGUSR1 
################################################################################ 
$SIG{USR1} = sub { 
    # Subtract something from something and report difference 
    open(my $fh, '>', '/tmp/status.txt'); 
    print $fh "Time remaining = 42\n"; 
    close $fh; 
}; 

################################################################################ 
# Main loop 
################################################################################ 
while ($continue) { 
    sleep 1; 
} 

Вы бы затем послать сигнал HUP или сигнал USR1 с:

pkill -HUP daemon.pl 

или

pkill -USR1 daemon.pl 

и посмотрите в /tmp/status.txt для выхода положить от демона. Вышеупомянутые команды предполагают, что вы сохранили скрипт Perl как daemon.pl - отрегулируйте, если вы использовали другое имя.

Или вы могли бы написать демону pid в файле при запуске и использовать опцию -F для pkill.

+0

Это действительно более простой и всеобъемлющий способ сделать это, чем с Sockets. Огромное спасибо :) ! – cocosushi

-2

Есть несколько способов общения с демонами, но я думаю, что сокеты домена UNIX будут иметь наибольший смысл. В perl, IO::Socket::UNIX было бы на что посмотреть.

+0

Это именно то, что я искал. Благодаря ! :) – cocosushi

+0

@cocosushiTS: Вы уверены? Вы когда-нибудь программировали с помощью Sockets? Это не так. – Borodin

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

  • Нет связанных вопросов^_^