Készitettem a minecraft szervernek egy web alapú kezelőfelületet, de sehogy se sikerül megcsinálni, hogy gombnyomásra elindítsa a szervert. Hogy tudom weblapról elinditani a minecraft szerverem?
"a minecraft szervernek egy web alapú kezelőfelületet"
Milyen nyelven?
Mert a legtöbb szerveroldali szkriptnyelvben van lehetőség külső program futtatására - például PHP-bn az exec():
nodeJS-ben a child_process.exec():
Pythonban az os.exec...:
de nagyon ügyelj a biztonságra: a szkript ez által ne nagyon férhessen hozzá más erőforráshoz!
Köszönöm!
A phpból már próbáltam, az exec(), shell_exec(), ssh2_exec() parancsokkal, de egyikkel se ment.
A kezelőfelület és a minecraft szervez azonos szerveren van?
Hogyan próbálkoztál ezekkel a kódokkal? Hogyan próbáltad felderíteni, hogy mi volt a hiba?
Igen, azonos szerveren van!
Végig néztem 600 oldalt, különböző programozási nyelveket próbáltam ki, de egyik hatására se indult be a szerver!
Pl.: ssh2_exec('sh start.sh'); => egyrész ezzel az a baj hogy nem a háttérbe futtatja hanem a weblapon.
screen parancsnál meg azt irja ki hogy terminál szügséges.
Utána kerestem node.js megoldást de azt meg csak terminálból lehet lefuttatni.
Azt szeretném megcsinálni, hogy a weblapon megnyomom a start gombot és a linux szerveren elindul a minevraft szerver. De nem a weblapon kezd el futni.
Nagyon sokat próbálkoztam vele. Előre is köszönöm a segítséget!
"Pl.: ssh2_exec('sh start.sh'); => egyrész ezzel az a baj hogy nem a háttérbe futtatja hanem a weblapon."
1. Az ssh2_exec() ( [link] ) arra szolgál, hogy egy távoli hoszton - amivel az ssh2_connect() ( [link] ) csatlakozik és az ssh2_auth_password() ( [link] ) segítségével autentikál - parancsot futtasson, így az első paraméterének az ssh2_connect() által visszaadott munkamenetnek kell lennie.
2. Ahhoz, hogy a háttérben futtass egy Linux parancsot a parancs végére be kell írni egy & operátort:
"If a command is terminated by the control operator &, the shell executes the command in the background in a subshell. The shell does not wait for the command to finish, and the return status is 0. These are referred to as asynchronous commands."
Viszont ha nem akarod a parancssor kimenetét megvárni ajánlatos az összes kimenetet átirányítani (például a /dev/null állományba) - szóval összegészében valahogy így:
exec("start.sh >/dev/null 2>&1 &");
Hálásan köszönöm!
🙏🙏🙏
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!