Autor Zpráva
opsidiam
Profil
Dobrý den nikde na internete neviem naist navod na to ako by som mohol dat na web formular tak aby sa cez ten form dal ovladat terminal na ubuntu server 14.04 prosim pomohli by ste mi?
juriad
Profil
http://php.net/manual/en/function.shell-exec.php
Ale dej si pozor na zabezpečení. Tento skript nesmí být veřejně přístupný.
opsidiam
Profil
:( vôbec tam tomu nechapem :(
Karel N.
Profil *
Čeho tím chceš docílit? Jakou máš představu použití? To co tady chceš se nedělá z mnoha důvodů, proto nikde nejsou návody. Docílit se toho samozřejmě dá, ale určitě na tvoji potřebu existuje hotové řešení.
juriad
Profil
Tady máš hromadu funkcí, které umí spouštět externí programy; většinou chtějí jako první argument příkaz, který se má vykonat.
http://php.net/manual/en/ref.exec.php

Liší se mezi sebou tím, jak zvládají výstup a jak nakládají s návratovou hodnotou.
opsidiam
Profil
mne nejde o bezpecnost lebo k tomu budem mat prystup len ja ale chcem si omnoho ulahcit robotu zatial som skusil nieco taketo
<form action="server.php" method="post">
      <input type="hidden" name="sent" value=""/> 
      <input type="text" name="shell" maxlength="32"/>
  <input type="submit" name="send" value="Login" class='buttons'/>
</form>

//server.php

<?php
$sh=$_POST['shell'];
shell_exec('../../../../../');
shell_exec('cd /opt/Server'.$sh);
shell_exec('./start');
?>

a webserver sa nachadza takto /var/www/vhosts/default/htdocs a ja sa potrebujem dostat /opr/Server a tu spustit start.sh
juriad
Profil
opsidiam:
shell_exec vykoná jediný příkaz nezávisle na předchozích voláních.
shell_exec('cd /opt/Server && ./start.sh');
Moc teď nechápu, k čemu tam je ten $sh.

Prostě si v terminálu přejdi do adresáře /var/www/vhosts/default/htdocs a napiš jediný příkaz, který provede vše co chceš. Pro řetězení příkazů můžeš použít operátory:
; - stredník (nezávislé příkazy)
&& - and (pokud předchozí byl úspěšný)
|| - or (pokud předchozí nebyl úspěšný)
| - přesměrování výstupu na vstup následujícího
opsidiam
Profil
a ked ten server spusti tak bude bezat stale?? lebo ked som to pustal cez terminal tak ked som ho zavrel tak sa server vipol,
PS stale to nejde :( a $sh je cislo ktore zadam, lebo tam nieje len jeden server


Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.


toto vipise
Joker
Profil
opsidiam:
Ta hláška znamená, že se nepodařilo rezervovat dost paměti pro virtuální stroj Javy.
Karel N.
Profil *
trochu mi to připadá, že si chceš udělat vlastní ovládací dashboard pro Minecraft, trefil jsem se? Vše co spustíš z php, bude pod procesem php a po jeho ukončení se také ukončí. Běžně se k tomuhle účelu udělají init scripty, které se mohou přes php volat a jejich výstup zpracovat nebo přeposlat do stránky. Mrkni jak je řešení spouštění služeb třeba v /etc/init.d.
Fisir
Profil
Reaguji na Karela N.:
Nebo lze využít i další příkazy, jako třeba nohup, nebo pokročilejší screen.
opsidiam
Profil
Karel N.:
Presne na to :) ale ked som kukal ten nohup tak som sa rozhodol ze pouzijem ten ale neviem ako to zapisat je tam napisane :
nohup ./script.sh & ale neviem ako to zapisat do PHP , chcel by som to zakombinovat do tochto scriptu:
<?php
if(isset($_POST['sent'])){
$sh=$_POST['shell'];
echo $sh;
$output = shell_exec('cd /opt/MC'.$sh.' && ./start.sh 2>&1');
echo $output;}
?>
poradili by ste mi?
Dakujem
Karel N.
Profil *
a proč nepoužiješ tohle https://github.com/sandain/MinecraftServerControlScript?

nohup a jiné způsoby jak spuštit proces na pozadí není dostatečné. Ty potřebuješ zároveň získat přístup k již běžícímu procesu, abys ho případně restartoval, upravil, stopnul atd. BTW tvůj příkaz by měl vypadat cca takhle shell_exec('cd /opt/MC'.$sh.' && nohup ./start.sh 2>&1');

Přímo v distribuce s minecraftem je řídící init script a návod k němu je v tutoriálech na stránkách minecraftu http://minecraft.gamepedia.com/Tutorials/Server_startup_script.

V momentě, kdy se ti tohle povede na serveru zprovoznit, ovládat to z php je lahoda:
//start
$result = shell_exec("/etc/init.d/minecraft_server start");

//stop
$result = shell_exec("/etc/init.d/minecraft_server stop");

//create world on port
$result = shell_exec("/etc/init.d/minecraft_server create worldname 22333");

//get status of world
$result = shell_exec("/etc/init.d/minecraft_server status worldname");

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: