Portál AbcLinuxu, 16. července 2025 07:48


Dotaz: PHP dotazy na server

23.11.2008 20:25 maic
PHP dotazy na server
Přečteno: 681×
Odpovědět | Admin

Zdravím,

chtěl bych se zeptat jestli by mě někdo neporadil jak udělat aby se aplikace spustila pod předem nastaveném PID ... mám administraci serverů pro gta samp.. a potřebuji nějak udělat zapínání a vypínání serverů a napadlo mě na to použít v php příkaz  system("PRIKAZ");  ,ale nevim jak predem nastavit ten PID .. a nebo alespon jak v PHP zjistit jakej PID ten spustenej program má.

Předem děkuji. Michael Fanta

 

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.11.2008 20:46 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: PHP dotazy na server
Odpovědět | | Sbalit | Link | Blokovat | Admin

Tohle se řeší tak, že server (nebo skript, který ho startuje) při startu uloží do souboru své PID  (v linuxu se k tomu běžně používá adresář /var/run/) a ty si pak z toho souboru načteš PID a můžeš zasílat signály.

-- Nezdar není hanbou, hanbou je strach z pokusu.
23.11.2008 20:55 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Jo takle.. a neporadil byste trošku blíže? Přece jenom já dělám s linuxem teprve chvilku. Třeba kdybyste byl tak hodnej a nějakej příklad uvedl. Byl bych moc vděčný. Určitě nejsem jediný, ale věci lépe chápu  spříkladu. 

AraxoN avatar 23.11.2008 22:13 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: PHP dotazy na server

PID procesu sa dá zistiť shell príkazom pidof, kde ako parameter ide názov príkazu. Napríklad:

araxon@lighthouse ~ $ pidof firefox-bin
6217

To sa potom dá vložiť do iného príkazu cez operátor `:

araxon@lighthouse ~ $ kill -15 `pidof firefox-bin`

V php potom cez shell_exec takto: shell_exec("kill -15 `pidof firefox-bin`");

23.11.2008 23:17 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Takže jestli to chápu dobře tak to    firefox-bin  je nazev toho PID ?

No dejme tomu že mám aplikaci   samp_7777 a chci kni dat PID 7777 to udělám jak?

zkoušel sem to i takto:

./samp_7777 -PID=777

ale nic

 

23.11.2008 23:34 CN!RY
Rozbalit Rozbalit vše Re: PHP dotazy na server

a co pro start třeba nějak takto

/sbin/start-stop-daemon --start -m -p ./samp.pid -b -x samp_7777

 

a pro kill pak takto

/sbin/start-stop-daemon --stop -p ./samp.pid

23.11.2008 23:39 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Takto mě to nejde ... 

AraxoN avatar 23.11.2008 23:40 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: PHP dotazy na server

PID si nevyberáš, ten Ti pridelí operačný systém. firefox-bin bol názov programu, ktorého PID som chcel zistiť, a napísal som ho len pre ukážku. Ak taký program u Teba nie je spustený tak pidof nevráti nič.

24.11.2008 00:04 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Tak jinak.. udělal jsem to teda takto:

 

  $pid = shell_exec("pidof samp_7779");
  $akce = "kill ".$pid;
  echo "PID (".$pid.") - Akce (".$akce.")";
  shell_exec($akce);

  echo "<p><font color='#008000'>Server vypnut...</font></p>";
 

 

Ale nic se neprovede.. nevíte proč? To by mě fakt zajímalo teda proč? :(

AraxoN avatar 24.11.2008 00:58 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: PHP dotazy na server

A ten program samp_7779 beží pod tým istým užívateľom ako webserver? Zistilo to ten PID? Čo to vypísalo?

24.11.2008 01:17 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Ano .. šak tam mám to echo kde se vypisuje ten PID kterej to zjistí... a pak teprve zadává KILL 

24.11.2008 01:22 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Jinak vypsalo se to přesně takto

 

PID (9667 ) - Akce (kill 9667 ) 

24.11.2008 10:55 Haaja | skóre: 25 | blog: haaja | Praha
Rozbalit Rozbalit vše Re: PHP dotazy na server

Jedine co me napada ze to co chces stopnout bezi pod jinym uzivatelem (root nebo neco jineho) nez je apache a tudiz ten kill dat nemuzes.

 

Kdyz spustis ten kill rucne pod uzivatelem apache (www-data nebo nejaky jiny pouzivany) tak to zabije?

24.11.2008 11:05 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

přes ssh ho to zabije... ale když dám top tak je tam user root a apache to samý 

24.11.2008 11:22 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Ach jo ted na to kooukám.... apache běží přes usera    nobody :(

 

  515     nobody      15    0    27532    16m    5476   S    0    3.3    0:04.62     httpd 

24.11.2008 11:41 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Dal sem si tam

 

  echo shell_exec("groups")."<br>";
  echo shell_exec("whoami")."<br>";
 

 

a vyplsalo mi to:

nogroup

nobody

 

tak jde nejak spustit ty servery pod temito udaji? 

24.11.2008 11:50 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Vyřešeno.. použil jsem  

su nobody -c ./samp_7777

 

ale ještě bych potřeboval jestli by mě někdo neporadil jak by měl vypadat script co by tohle zadaval.. např ...  start.sh

 

a tam aby se provedlo

su nobody -c ./samp_7777 

24.11.2008 13:30 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Takže mám tento script:  start_7777.sh

#!/bin/bash
cd /root/servery/7777
su nobody -c ./samp_7777 &
 

a pouštím ho pomocí

shell_exec("./start_7777.sh");

nevíte pls někdo proč to nejde takto spustit? :) 

24.11.2008 15:30 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: PHP dotazy na server

Má ten skript práva pro spuštění (chmod +x start_7777.sh)?

BTW. proč to nejde takto spustit bys nám spíš měl říct ty podle nějaké chybové hlášky nebo výpisu z logu :)

A proč tam máš vlastně to su nobody, když to spouštíš z PHP pod Apache a Apache už pod nobody běží, jak píšeš výše?

24.11.2008 16:08 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

V logu nic není.. nebo aspon ve kterým? .. a chmod je nastaven na 777 

24.11.2008 16:22 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

No tak už vše funguje.. jen mě štve, že web čeká až se server ukončí.. do té doby se nenačítá :'( 

25.11.2008 12:16 Kroko | skóre: 22
Rozbalit Rozbalit vše Re: PHP dotazy na server
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nejak jsem nepochopil proc potrebujete spoustenemu procesu prirazovat konkretni PID, navic si myslim (mozna se pletu) ze PID prirazuje samo jadro podle toho jak se jednotlive procesy spousteji a vy ho neovlivnite, max. ho muzete zjistit ...

http://kroko.evesnight.net
25.11.2008 12:18 Kroko | skóre: 22
Rozbalit Rozbalit vše Re: PHP dotazy na server
Odpovědět | | Sbalit | Link | Blokovat | Admin

Asi spise hledate UID (user ID) nebo GID (group ID) a ne PID (proces ID)

http://kroko.evesnight.net
25.11.2008 19:24 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Tohle už je vyřešeno :)

Teďka se snažím příjít na tuhle chybu:

 

když kliknu na start serveru tak mě to server spustí ale apache čeká dokud se server nevypne.. až server vypne tak apache pokračuje v akci. :( 

25.11.2008 20:14 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: PHP dotazy na server

Ten server by se měl nějak daemonizovat. Měl by to umět sám - tato vlastnost se obecně od serverů celkem očekává :-) Takže se zkus podívat po nějakém přepínači v příkazové řádce. Nebo si můžeš pomoci nějakým trikem - např. nohup (nevím jestli bude fungovat), nebo teď mě napadá konstrukce typu  "(su nobody -c ./samp_7777 &)".

27.11.2008 13:10 maic
Rozbalit Rozbalit vše Re: PHP dotazy na server

Vyřešeno .. díky Messa :)

27.11.2008 13:31 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: PHP dotazy na server

Nakonec stačilo jen přesměrovat standardní a chybový výstup do /dev/null a spustit skript na pozadí:

<?php
system("./skript.sh 2>/dev/null >/dev/null &");
?>

Nejpravděpodobnější vysvětlení - výstupy jsou napojeny na rouru, kterou čte PHP (jak jinak) a PHP považuje příkaz za dokončení evidentně zavřením této roury. Samozřejmě je nutné, aby se proces se shellem ukončil, proto ten ampersand.

Josef Kufner avatar 25.11.2008 22:24 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: PHP dotazy na server
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě k tomu system()... Já bych raději napsal malého jednoduchého démona, který by poslouchal na nějakém soketu, očekával příkazy a dělal podle nich co je potřeba. IMHO by to bylo výrazně bezpečnější a dalo by se s tím i vyřešit monitorování stavu služeb, jejich automatické restartování a další věci. A nejspíš už i něco takového existuje.

Ale jak tak nad tím přemýšlým, asi bych se na to vykašlal, nahrál ssh klíče a pro obzvlášť otravné činnosti si napsal jednoduché scripty (hlavně ssh-nuke all shutdown now).
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.