PHP execelés linux alatt.
Sziasztok!
Egy olyan programot szeretnék használni, ami egy adott (*.sh) szkriptet futtat le. Készítettem egy rádió szerver készítő PHP programot SHOUcast alatt és a szerver indításával lennének néhány gondjaim. Az (*.sh) szkript maga a rádió szervert hívja meg, hogy elindítsa azt. Ezt a műveletet remekül elvégzi és elkezd futni a szerver is remekül. Nos az lenne a problémám, hogy amikor elindítom a szervert a következő php szkripttel, akkor egyszerűen a böngésző végtelen töltésbe kezd. De közbe fut a szerver is. Ha leállítom a töltést, akkor is fut tökéletesen és Rendszerfigyelőn is látható a program futása.
A lefuttató szkript a következő :
-------------------------------------------------------
exec('/bin/sh /var/www/sc_serv.sh');
-------------------------------------------------------
sc_serv.sh tartalma ...
/var/www/sc_serv
-------------------------------------------------------
Ez csak egy kis részlet, hogy hogyan indítja el a szervert a program.
Több dokumentációt olvastam [php.net]-en és egyéb más Google által talált oldalakon, de egyikük közül sem találtam meg azt amit kerestem. Nos lényegében ezért fordultam én a Weblaborhoz.
Összességében nekem egy tanács, vagy ötlet kéne, hogy hogyan indítsam el a szervert úgy, hogy ne kezdjen végtelen töltésbe. Pl .: 1-szer lefut és akkor megáll a töltés. Az egyéb más parancsok mint pl .: whoami működnek folyamatos töltés nélkül. Véleményem szerint a programot próbálja ott monitorizálni és ezért nem akarja megállítani a töltést. Ezt esetleg valahogy kilehet a monitorizálást kapcsolni? Vagy van erre más indítási módszer ami biztonságosabb, vagy jobban működik? Mert szerintem ha nagyobb dolgokba kezdenék ezzel a módszerrel, akkor magára omlana ez az egész.
Előre is köszönöm a tanácsokat, ötleteket, válaszokat!
Üdvözlettel, Bence.
■ Egy olyan programot szeretnék használni, ami egy adott (*.sh) szkriptet futtat le. Készítettem egy rádió szerver készítő PHP programot SHOUcast alatt és a szerver indításával lennének néhány gondjaim. Az (*.sh) szkript maga a rádió szervert hívja meg, hogy elindítsa azt. Ezt a műveletet remekül elvégzi és elkezd futni a szerver is remekül. Nos az lenne a problémám, hogy amikor elindítom a szervert a következő php szkripttel, akkor egyszerűen a böngésző végtelen töltésbe kezd. De közbe fut a szerver is. Ha leállítom a töltést, akkor is fut tökéletesen és Rendszerfigyelőn is látható a program futása.
A lefuttató szkript a következő :
-------------------------------------------------------
exec('/bin/sh /var/www/sc_serv.sh');
-------------------------------------------------------
sc_serv.sh tartalma ...
/var/www/sc_serv
-------------------------------------------------------
Ez csak egy kis részlet, hogy hogyan indítja el a szervert a program.
Több dokumentációt olvastam [php.net]-en és egyéb más Google által talált oldalakon, de egyikük közül sem találtam meg azt amit kerestem. Nos lényegében ezért fordultam én a Weblaborhoz.
Összességében nekem egy tanács, vagy ötlet kéne, hogy hogyan indítsam el a szervert úgy, hogy ne kezdjen végtelen töltésbe. Pl .: 1-szer lefut és akkor megáll a töltés. Az egyéb más parancsok mint pl .: whoami működnek folyamatos töltés nélkül. Véleményem szerint a programot próbálja ott monitorizálni és ezért nem akarja megállítani a töltést. Ezt esetleg valahogy kilehet a monitorizálást kapcsolni? Vagy van erre más indítási módszer ami biztonságosabb, vagy jobban működik? Mert szerintem ha nagyobb dolgokba kezdenék ezzel a módszerrel, akkor magára omlana ez az egész.
Előre is köszönöm a tanácsokat, ötleteket, válaszokat!
Üdvözlettel, Bence.
Futtatás a háttérben
Kilövés
Részben értem, hogy mi lenne a cél. Ha leválasztja a terminált, akkor nyert ügy mert fut a dolog. Igen elnézést elfelejtettem írni milyen linuxt használok, de pont Ubuntut, tehát sikerült eltalálnod :). Tehát a a screen -d /var/www/sc_serv -et használom ami maga a szervert indítja el, akkor elméletben nyit egy új terminált és futtatja ott?
Kipróbálom és jelzek majd, ha jutottam-e valamire. De még erre kíváncsi vagyok, hogy ezt hogy lehet leállítani. Úgy tudom pkill, vagy valami ilyesmi.
Üdv, Bence.
Telepítettem
---
nohup /var/www/sc_serv
---
Ez maga a konzol része, ami futtatja a szervert. A következő képp rá execeltem a indító szkriptre.
---
exec('screen -d /etc/init.d/sc_serv.sh');
---
Ekkor az oldal lefut 0.000060 mp alatt és eredményileg nem adott vissza semmit és a szervert sem indította el. A szerver sem indul el sajnos. Lehet, hogy én rontottam el valamit, ha igen légyszíves kijavítanátok engem?
Előrre is köszönöm!
Üdv, Bence.
Megtaláltam a bibit.
Must run suid root for multiuser support.
Ezt hogyan tudnám beállítani, hogy jól működjön? Gondolom valami féle jogot kéne rá adnom, csak épp azt nem tudom mit. Segítenétek légyszíves?
Köszönöm!
Üdv,
Bence.
root vagy nem root?
A terminál leválasztás nem azt jeleni, hogy egy új ablak nyílit, hanem hogy a munkamenet a háttérben fog futni, és bármikor "fel lehet venni". A terminál multiplexer tehát kicsit olyan, mint egy erősen fölturbózott asztalkezelő, csak éppen terminálhoz, nem X grafikus felülethez.
Hiba
Itt a &-vel ezt csinálja :
http://84.3.231.1/
Példa programon megtudod nézni most. Amíg fut a gépem de most sokáig fog futni kb késő estig.
De itt ugyanaz a baj, hogy egyszerűen tölt-tölt-tölt és tölt :S
Ha ez működne, hogy egyszerűen lefut símán és elindítja a szervert úgy örülnék, hogy kimennék a hidegbe és körbe futnám jó párszor a házat :D
Remélem van valami megoldás én már minden lehetséges dolgot kipróbáltam.
De mivan akkor ha olyan scriptet írok, ami elindítja a progit és nyit egy új sessiont és abba fut a szerver és a script ami elinditotta bezárul tehát leáll és nem töltene az oldal sem. Szerintem.. Már egy ideje kitaláltam ezt, de nem tudom, hogyan kéne megvalósítani..
Van ötleted?
Üdv, Bence.
Hibás koncepció
Magyarul szólva: Ne indíts PHP-ból szervert!
Tegyél le a lemezre egy üres fájlt amit egy cronjob beolvas vagy akármi, de ne PHP-ból indítsd!
Egyetértek
Egyet értek.
Például ezek az admin panelek hogyan oldották meg? .:
www.tcadmin.com ( Windows-os )
www.gamecp.com ( Linux & Windows-os )
És még sorolhatnám ...
Szoval vagy ha tud nekem valaki ajánlani egy jó ilyen programot a hldStarton kívül, akkor az jó lenne nagyon és kimondottan örülnék.
Vagy valaki esetleg tudna egy jó kis doksit erre, vagy egy jó ingyenes panelt rá, akkor örök hálám érte!
proclub -> Őszíntén szólva az az egyetlen bajom, hogy nekem Kínai amit most elmondtál. Ha picit foglalkozok vele, akkor biztos megértem, vagy ha bővebben bevezetnél a témába. Nem az a célom, hogy hagyjam a francba az egészet, hanem megoldást keresek.
Köszönöm előrre is!
Üdv, Bence.
Kifejtve
Mivel viszonylag kevés tapasztalatod van, ezért azt mondom, hogy nézz utána a cronjobok működésének. Beteszel egy shell scriptet, ami ha létezik mondjuk a /home/server/server1/kill fájl, akkor kikilleli az 1-es szervert, ha a start nevü fájl létezik, akkor elindítja, stb. PHP-ból egy touch paranccsal létre tudod hozni a fájlokat, viszont biztonságos mert más nem tud csinálni a PHP. Annyi történik hogy a következő egész percben fog elindulni a szoftver, nem azonnal.
Ami az admin paneleket illeti, láttam ott is már elég vad megvalósításokat, pl hogy az admin panelnek root jogokkal kell futnia, ami PHP esetén több mint kockázatos. A Windows process modellt nem ismerem annyira, de ha jól tudom, ott nincs ilyen probléma, mert legrosszabb esetben egy start paranccsal elindítja az alkalmazást és onnantól kezdve nem sok közül vagy egymáshoz.
Ha jól néztem, az általad belinkelt game control panelek nem olyan vészesen drágák, 150 USD azért nem a világ (GameCP) ha pénzt keresel vele. Ha nem keresel pénzt vele, akkor meg valszeg azért belefér, hogy belépsz SSH-n és újraindítod amit újra kell. :)
Ez már meg van.
Nekem egyedül ez a leválasztós dolog nem megy. Vagy erre van szerver monitorizáló program, ahol lehet figyelni a futú szervereket, stb? Amúgy tudom, hogy most a Google bácsit is kérdezhettem volna, de az a gáz, hogy nem akarom elrontani a dolgokat.
Szal összességében nekem egy olyan "shell-script" kéne ami elindítja a szerver alkalmazást és utánna "elméletben nyit egy új terminált (sessiont)" és a shell script meg leáll, hogy az oldalon lévő töltés is megálljon.
Az fgcklan.hu-nál van egy szerverem eléggé gázoss az admin panell de megoldották mégis valahogy ezt a témát :S... Egy egyszerű php script futtatja le a dolgot és újraindította a szervert. Vaagy lehet, hogy php-ből nem is indítnak el szervert. Hmm. Az lehetséges, hogy egy XXXX nevű programot újraindítsunk execcel?