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

Discussion in 'PHP' started by amorphius, 3 May 2009.

  1. amorphius

    amorphius New Member

    Joined:
    22 Jan 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    Пишу демона, который спит до того момента, пока веб-скрипт не пошлет сигнал USR1. Потом он просыпается и делает свои грязные делишки. Если и демон и скрипт запущены от одного юзера, то все работает, но когда демон запустился от одного, а скрипт от www-data, то не работает. Я так понимаю это из за соображений безопасности, ведь у демона права рута.
    Как мне быть?
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    amorphius Создавать локальный сокет/изменять текстовый файл, который демон переодически будет читать/погуглить на тему IPC(inter-process communication)
     
    _________________________
  3. amorphius

    amorphius New Member

    Joined:
    22 Jan 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    создал сервер, ждет соединения на порт 2323, перловский скрипт создает сокет, конектится, вылетает ошибка
    Code:
    Software error:
    
    Can't create socket: Connection refused
    
     
  4. amorphius

    amorphius New Member

    Joined:
    22 Jan 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    еще идеи будут?:)
     
  5. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    гугли: pipe, семафоры.
     
  6. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    Код покажи, тогда может чем и поможем.
     
  7. amorphius

    amorphius New Member

    Joined:
    22 Jan 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    запросто...
    сервер:
    Code:
    #!/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;
    
    клиент
    Code:
    #!/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;
    
     
  8. amorphius

    amorphius New Member

    Joined:
    22 Jan 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    идеи кончились?