Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Как послать сообщение другому процессу? (https://forum.antichat.xyz/showthread.php?t=118863)

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

Цитата:

Сообщение от amorphius
создал сервер, ждет соединения на порт 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

идеи кончились?


Время: 09:52