PDA

Просмотр полной версии : Как послать сообщение другому процессу?


amorphius
03.05.2009, 13:53
Пишу демона, который спит до того момента, пока веб-скрипт не пошлет сигнал USR1. Потом он просыпается и делает свои грязные делишки. Если и демон и скрипт запущены от одного юзера, то все работает, но когда демон запустился от одного, а скрипт от www-data, то не работает. Я так понимаю это из за соображений безопасности, ведь у демона права рута.
Как мне быть?

Gifts
03.05.2009, 14:08
amorphius Создавать локальный сокет/изменять текстовый файл, который демон переодически будет читать/погуглить на тему IPC(inter-process communication)

amorphius
04.05.2009, 16:56
создал сервер, ждет соединения на порт 2323, перловский скрипт создает сокет, конектится, вылетает ошибка

Software error:

Can't create socket: Connection refused

amorphius
07.05.2009, 08:24
еще идеи будут?:)

scrat
07.05.2009, 08:38
гугли: pipe, семафоры.

demond
07.05.2009, 11:03
создал сервер, ждет соединения на порт 2323, перловский скрипт создает сокет, конектится, вылетает ошибка

Software error:

Can't create socket: Connection refused


Код покажи, тогда может чем и поможем.

amorphius
09.05.2009, 15:58
запросто...
сервер:

#!/usr/bin/perl
use strict;
use IO::Socket qw(:DEFAULT :crlf);
use Digest::SHA1 qw(sha1_base64);
use constant MY_PORT => 2323;
$/ = CRLF;
my $quit = 0;
my $port = shift || MY_PORT;
my $sock = IO::Socket::INET->new(Listen => 20, LocalPort => $port, Timeout => 60*60, Reuse => 1)
or die "Can't create listening socket: $!\n";
while (!$quit)
{
next unless my $session = $sock->accept;
while(<$session>)
{
my $hash = sha1_base64("some secret");
if ($hash eq $_)
{
warn "Catch something!";
}
}
close $session;
}
close $sock;

клиент

#!/usr/bin/perl
use strict;
use CGI ':standart';
use DBI;
use utf8;
use CGI::Cookie;
use Devel::Peek;
use Pack;
use HTML::Entities;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use Digest::SHA1 qw(sha1_base64);
use IO::Socket qw(:DEFAULT :crlf);

print "Content-type: text/html\n\n";
my $host = "127.0.0.1";
my $port = 2323;
my $sock = IO::Socket::INET->new("$host:$port")
or die "Can't create socket: $!\n";
print $sock sha1_base64("some secret");
close $sock;

amorphius
11.05.2009, 00:48
идеи кончились?