Puncte:2

Cum fac un serviciu de pornire pentru un server Minecraft care are un fișier start.sh?

drapel eg

Am instalat un server FTB modificat pe serverul meu Ubuntu, am creat un utilizator și un grup numit „ftb” și i-am dat propriul director /opt/ftb/ care conține un folder cu fișierele serverului. În folderul serverului, există un fișier start.sh pentru a porni serverul. Cum fac un fișier de serviciu de sistem, astfel încât să pot folosi comenzi precum starea systemctl ftbacademy.service, systemctl start ftbacademy.service, și systemctl stop ftbacademy.service. La oprirea serverului doresc ca acesta să salveze și apoi să închid serverul. Cum ar arăta fișierul .service? Știu că trebuie introdus /etc/systemd/system/, dar nu știu cum să scriu fișierul care l-ar face pe utilizatorul ftb să deschidă propriul terminal virtual sau orice altceva pentru a putea salva lumea și apoi opri serverul.

Ubuntu Server Versiunea 20.04.3

Site-ul de descărcare a fișierelor server FTB Academy 1.16 utilizat: https://feed-the-beast.com/modpacks/88/server/2077 Am selectat opțiunea de descărcare Linux, apoi am rulat fișierul de instalare pentru a descărca automat fișierele serverului.

De asemenea, folosesc o versiune diferită de JDK pentru a rula fișierul server, așa că am schimbat fișierul start.sh în acesta:

#!/bin/bash
dacă ! grep -q "eula=true" eula.txt; atunci
    echo „Sunteți de acord cu EULA Mojang disponibil la https://account.mojang.com/documents/minecraft_eula ?”
    citiți -N 1 -p „[y/n]” EULA
    if [ "$EULA" = "y" ]; atunci
        echo "eula=true" > eula.txt
        ecou
    fi
fi
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -Xmx5000M -Xms4000M -1jar for. 5-36.2.2.jar nogui
Nate T avatar
drapel it
ce server ftb modificat? A venit de pe site-ul oficial feedthebeast sau din altă parte. Listați punctul final și îl voi instala local și vă voi anunța. Trebuie să văd fișierul sh înainte să vă spun cum să îl adăugați. Poate fi numit în `.bashrc`, dar ar trebui să văd exact ce face înainte de a da sfaturi de instalare. În plus, vreau o copie a serverului. XD Btw trebuie să adăugați versiunea Ubuntu la întrebare. Versiunile diferite conțin medii diferite. Majoritatea răspunsurilor vor varia cel puțin puțin în funcție de versiune. Mai ales că tocmai am schimbat administratorul de câștig implicit în 21.04
lordoftimelords avatar
drapel eg
@NateT Cred că am adăugat toate informațiile pe care le-ați solicitat. Am folosit site-ul oficial FTB și am adăugat linkul în postare.
lordoftimelords avatar
drapel eg
@NateT `cd /usr/lib/jvm/java-11-openjdk-amd64/bin && ls -a | grep java` scoate `java java javac javadoc javap`.Cum va ajuta acest lucru la crearea fișierului .service? Nu am probleme la rularea serverului, vreau doar să fac un fișier .service pentru al rula la pornire, să opresc serverul și să verific starea folosind utilizatorul ftb. Iartă-mă dacă înțeleg greșit ce se întâmplă. Nu sunt prea familiarizat cu asta. Urmez în mare parte ghiduri foarte specifice și copiez și lipesc lucruri.
Terrance avatar
drapel id
Răspunde asta la întrebarea ta? [Cum rulez o singură comandă la pornire folosind systemd?](https://askubuntu.com/questions/919054/how-do-i-run-a-single-command-at-startup-using-systemd)
Nate T avatar
drapel it
De asemenea, vad si cuvantul `log4j, care ma sperie putin. Este urmat de „remediază”, dar nu mi-aș paria ferma pe ea. Dacă intenționați să-l puneți într-un server Docker sau apache2 cu port fwded, nu aș face-o. Vezi [aici.](https://www.youtube.com/watch?v=qjA_vc9Ua5A&t=203s) Este literalmente un videoclip cu un server Minecraft de pe Ubuntu injectat cu încărcături utile care conțin cmd-uri pentru a fi rulat pe sistemul victimelor. Aș sugera să verificați știrile și să încercați să evaluați încrederea comunității open-source în patch. Evident, au apărut mai multe vulnerabilități de la ultima verificare.
Nate T avatar
drapel it
OK, DACĂ NU PLANIFICAȚI SĂ PORT-FOWARD PE INTERNET, rulați acest cmd în bash shell. `MC_CMD='alias start_srvr="/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XMx5000 -Xms4000M -jar forge-1.16.5-36.2.2.jar nogui"' && echo "${MC_CMD}" >> ~/.bash_aliases || echo „${MC_CMD}” >> ~/.bashrc`
lordoftimelords avatar
drapel eg
@NateT Ce se întâmplă dacă plănuiesc să port forward? Plănuiesc să folosesc serverul departe de casă cu prietenii. Folosesc aplicarea listei albe și am redirecționat doar portul necesar. De asemenea, utilizatorul ftb nu are sudo perms. De asemenea, cum aș opri serverul dacă ar trebui vreodată? Nu prea înțeleg ce face comanda de mai sus. Cred că înțeleg că adaugă un alias pentru a scurta comanda la start_srvr, dar ce înseamnă `&& ecou „${MC_CMD}” >> ~/.bash_aliases || echo "${MC_CMD}" >> ~/.bashrc` face?
Nate T avatar
drapel it
`sudo chmod 774 ` vă va oferi permisiunea necesară, dar rulați `ls -l ` și notează mai întâi vechiul șir de permisiuni, în cazul în care trebuie să schimbi înapoi.De asemenea, de ce ați folosi systemd pentru a rula un script de pornire? Vrei să alergi ca un demon? Acest lucru nu ar avea sens, decât dacă îl utilizați ca server web dedicat, caz în care nu contează...
Nate T avatar
drapel it
Aș aștepta câteva săptămâni... **Urmăriți videoclipul** ^^^. Are o vulnerabilitate URIAȘĂ. Suficient de mare încât ar putea foarte bine să fie ultimul cui în sicriul lui Java. Și asta vine de la un dezvoltator Java profesionist. Nu spun asta cu ușurință.
lordoftimelords avatar
drapel eg
@NateT Am adăugat un comentariu la răspunsul tău de mai jos cu un link către un ghid pe care l-am urmat pentru serverele vanilla. Nu știu cu adevărat avantajele și dezavantajele systemd și nu știu ce este demonul. Îmi place doar funcționalitatea de a putea porni serverul, verifica starea și opri serverul cu comenzi și nu trebuie să păstrez o fereastră activă în server pentru a face aceste lucruri. De asemenea, pot obține un link către acel videoclip? Și asta înseamnă că ar trebui să închid celelalte servere ale mele? Folosesc spigot pentru ele și folosesc TCPshield pentru a preveni ddos ​​și alte lucruri dacă nu mă înșel.
Nate T avatar
drapel it
Să [continuăm această discuție în chat](https://chat.stackexchange.com/rooms/132813/discussion-between-nate-t-and-lordoftimelords).
Terrance avatar
drapel id
Atunci s-ar putea să doriți să vedeți și https://askubuntu.com/questions/676007/how-do-i-make-my-systemd-service-run-via-specific-user-and-start-on-boot despre adăugarea `User=` și `Group=` pentru rularea ca alt utilizator în systemd.
Puncte:2
drapel eg

Am creat un fișier numit [email protected] la locatie /etc/systemd/system/. Fișierul conține următoarele:

[Unitate]
Descriere=Server FTB: %i
După=rețea.țintă

[Serviciu]
WorkingDirectory=/opt/ftb/%i

Utilizator=ftb
Grupa=ftb

Restart=intotdeauna

ExecStart=/usr/bin/screen -DmS mc-%i bash start.sh

ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval „lucruri „spuneți SERVERUL SE OPRIRE ÎN 15 SECUNDE...”\015”
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval „lucruri „spuneți SERVERUL SE OPRIRE ÎN 10 SECUNDE...”\015”
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval „lucruri „spuneți SERVERUL SE OPRIRE ÎN 5 SECUNDE...”\015”
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval „lucruri „salva-toate”\015”
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval „lucruri „stop”\015”

[Instalare]
WantedBy=multi-user.target

Apoi am folosit systemctl enable ftb@academy și systemctl start ftb@academy pentru a activa și a porni serverul. De asemenea, mi-am dat seama că atunci când am creat inițial utilizatorul ftb și i-am dat dreptul de proprietate asupra folderului, nu i-am dat permisiunea pentru subfoldere, așa că i s-a refuzat permisiunea de a porni serverul.

Puncte:0
drapel it

Luați în considerare adresa URL pentru EULA din script. Tot ce face este să vă întrebe că ați citit și dacă acceptați termenii acestuia, dar numai dacă nu vi s-a întrebat deja și nu ați răspuns da.

Deci, după prima rulare, va executa numai liniile de sus și de jos.

Cel mai simplu mod de a-l configura (ceea ce va economisi timp pe termen lung) este să adăugați un alias pentru comanda de pe ultima linie, care de fapt configurează și pornește fișierul server. Acest lucru se poate face cu:

MC_CMD='alias start_srvr="/usr/lib/jvm/java-11-openjdk-amd64/bin/java -javaagent:log4jfix/Log4jPatcher-1.0.0.jar -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XMx -Xmx Xms4000M -jar forge-1.16.5-36.2.2.jar nogui"' && echo "${MC_CMD}" >> ~/.bash_aliases || echo „${MC_CMD}” >> ~/.bashrc

Rularea comenzii pe care am adăugat-o mai sus este doar o ușoară comoditate, așa că nu trebuie să vă faceți griji cu privire la adăugarea scriptului la CALE sau trebuie fie să calculeze calea relativă, fie să tastați calea completă de fiecare dată când doriți să porniți serverul.

Dacă vă decideți vreodată să ștergeți serverul, puteți elimina „comanda” prin editare ~/.bash_aliases și eliminând singura linie care o conține.

lordoftimelords avatar
drapel eg
Cum aș opri serverul să folosească această metodă? S-ar putea să nu înțeleg pe deplin ce se întâmplă, dar cred că asta doar pornește serverul la pornire, dar nimic altceva nu este corect? Pentru celelalte servere ale mele, am urmat acest ghid https://linuxconfig.org/ubuntu-20-04-minecraft-server-setup și îmi place capacitatea de a opri serverul și de a-l transmite automat un mesaj de server care spune că serverul se închide . Știu că este pretențios, dar aș prefera așa ceva. Este posibil? Nu am cunoștințele pentru a recrea acest lucru pentru serverul ftb. Am încercat și am fost confuz.
Nate T avatar
drapel it
Cum scrie să faci asta în readme? Pot scrie o funcție pentru a o înregistra. De fapt, cu log4j, pot să-l omor de aici! XD Nu, dar serios, fișierul menționat la sfârșitul aliasului este punctul de intrare. Ar trebui să aibă o comandă de administrare „în joc” încorporată pentru a le face pe ambele (înregistrați și opriți serverul)
lordoftimelords avatar
drapel eg
De obicei, dacă rulați comanda start.sh ca utilizator în terminal în timp ce sshed, atunci rulează serverul în mod activ în terminal.Apoi puteți introduce comenzi în server (aproape ca / ​​comenzi în joc dacă aveți privilegii de proprietar sau de administrator), cum ar fi stop. Deci arată încărcarea serverului, puteți să tastați stop pentru a salva și opri, utilizați comenzi precum lista albă, lista neagră, ipban etc. Nu am nevoie de celelalte comenzi, deoarece pot edita fișierele care conțin utilizatorii din lista albă, dar opriți ar fi frumos, așa că nu trebuie să intru în Minecraft, să mă alătur serverului, apoi să-i comand să se oprească. Este nevoie de timp pentru a încărca.
Nate T avatar
drapel it
Văd. Voi scrie ceva. dă-mi o secundă.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.