Определение своего поддомена

Discussion in 'PHP' started by Apeckou, 27 Jun 2012.

  1. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    Здравствуйте. У меня стоит такая задача.

    Есть главный сервер site.ru. В нем находится мускульная таблица HOSTS.
    Есть серверы-спутники, на совершенно других IP-адресах, но вписанные в DNS как srv1.site.ru srv2.site.ru и так далее.
    Мне нужно сделать так, чтобы каждый из этих серверов раз в 5 минут обращался к таблице HOSTS на главном (адрес главного сервера прописан вручную везде) и сообщал ему инфу: свой адрес вида srv666.site.ru, загрузку ЦП и прочее...

    Для этого я написал скрип, запускаемый под кроном. Вот сам скрипт (может кому пригодится):

    Code:
    //выдираем данные о сервере через консоль 
    exec("df / | grep / | awk '{print $3}'",$ans_used); 
    exec("df / | grep / | awk '{print $4}'",$ans_free);
    exec("cat /proc/loadavg | awk '{print $1}'",$ans_bisy);
    
    $shost='http://'.getHostName(); //адрес нашего хоста - вот тут проблема
    $used=$ans_used[0]; //занятое место
    $free=$ans_free[0]; //свободное место
    $bisy=$ans_bisy[0]; //загрузка ЦП
    $newtime=time();   //вписываем текущее время (типа пингуемся что живы)
    
    //записываем полученные данные в главную таблицу
    $link=mysqli_connect("$server","$baselogin","$basepass","$database");
    $stmt=$link->prepare("INSERT INTO HOSTS VALUES(NULL,?,?,?,?,?) ON DUPLICATE KEY UPDATE free=?,used=?,bisy=?,time=?");
    $stmt->bind_param("siisiiisi",$shost,$free,$used,$bisy,$newtime,$free,$used,$bisy,$newtime);
    $stmt->execute();
    $stmt->close();
    $link->close();
    только вот проблема: переменная $shost (getHostName()) содержит только имя главного домена, а именно site.ru
    как бы мне выцепить именно поддомен на котором крутится сервер-спутник?

    Если ничего не придумается, придется вручную прописывать все серваки-спутники и заставлять главного сервера самого их опрашивать...
    чего делать крайне не хотелось бы =(

    Пока что смотрю в сторону чтения DNS-записей..но чето ниче вкусного там не вижу.
    ЗЫ, $_SERVER['http_host']; не предлагать, он под кроном возвращает пустое значение

    подскажите пажалусто..а то у меня мозг закипел и свистит
     
    #1 Apeckou, 27 Jun 2012
    Last edited: 27 Jun 2012
  2. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    ничего хорошего. Можно чтобы спутники представлялись своими PTR-именами. Это может всё заработать если DNS рядом и туда что-то можно накидать, PTR-записи. На одном IP - один спутник. Смогут выяснить у этого ДНС свои имена по IP.
    Короче делать будете так: вручную каждому серверу-спутнику "проименовываете" крон-скрипт ;)
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Apeckou если поддомены отличаются только номером - не проще ли на сервере получить все айпишники спутников (получится соответствие поддомен-ip)? А спутники пусть отправляют ip адрес.
     
    _________________________
  4. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    Можно чтобы спутники представлялись своими PTR-именами. Это может всё заработать если DNS рядом и туда что-то можно накидать, PTR-записи. На одном IP - один спутник. Смогут выяснить у этого ДНС свои имена по IP.
    Короче делать будете так: вручную каждому серверу-спутнику "проименовываете" крон-скрипт

    именно вручную ничего и не хотелось прописывать, ибо часть серваков буду устанавливать не я, и говорить кому-то чтобы он там чето прописывал - не айс)


    Apeckou если поддомены отличаются только номером - не проще ли на сервере получить все айпишники спутников (получится соответствие поддомен-ip)? А спутники пусть отправляют ip адрес.

    в таком случае проще уже сразу сделать запись доменов...
    и их опрашивать с главного сервера самостоятельно
    что, в общем-то, я и сделал))

    тему можно закрыть, а лучше ее сжечь во имя борьмы с извращениями и содомией)