Puncte:0

Cum creez un script bash care pornește o sesiune de ecran care poate fi detașată și reluată?

drapel eg

Extrem de nou în acest sens (primul script real pe care îl scriu), dar încerc să automatizez unele lucruri cu serverul meu Minecraft. Creez un script bash care va fi programat de chron la

  1. comutați regulatorul CPU pe performanță
  2. utilizați java pentru a porni fișierul server.jar

Folosind comenzile terminalului pe care le-am introdus ecran -r java -Xmx6800M -Xms6800M -jar server.jar nogui din directorul /home/user/minecraft unde am păstrat toate fișierele relevante; Am presupus că voi putea să arunc această comandă în script și ar începe o sesiune de ecran de care ar putea fi detașată. Folosind bash pentru a rula scriptul cu această comandă începe totul ca în mod normal, dar de câte ori mă detașez cu Ctrl+A Ctrl+D spune „detașat de” și dă un ID de sesiune pentru ecranul detașat... dar apoi folosind ecranul -r sau comenzile -ls arată că nu există ecrane care să fie reluate. Știu că procesul încă rulează, deoarece încă mă pot alătura serverului meu.

Chiar nu sunt sigur ce se întâmplă aici, dar dacă există o modalitate de a scrie un script care să ruleze fișierul meu server.jar într-o sesiune care poate fi detașată și reluată, aș aprecia câteva sfaturi.

bmellot2 avatar
drapel eg
Ca o actualizare, chiar dacă par să nu găsesc nicio sesiune de ecran la care să mă reconectez - folosind comanda pkill screen încheie procesul java început de scriptul meu, așa că probabil că există * o sesiune de ecran pe undeva? Pur și simplu nu-mi dau seama cum să-l găsesc și să mă reconectam la el după detașare
user10489 avatar
drapel in
Aceasta nu este cu adevărat o întrebare despre scripturile bash, ci despre cum să utilizați ecranul. Nu ați inclus suficiente informații pentru a determina care este problema dvs. Puteți folosi ps pentru a verifica dacă jobul dvs. java încă rulează. Este posibil să porniți ecranul și să încercați să-l reluați de la diferiți utilizatori sau ceva șterge punctele finale de socket ale ecranului.
user535733 avatar
drapel cn
Așadar, comanda de pornire funcționează și vă puteți atașa din nou la o sesiune care rulează și ați descoperit pagina de manual care detaliază cum să enumerați sesiunile. Care este întrebarea la care vrei un răspuns? Sfat: Utilizați systemd pentru a porni/opri serverul în loc de un script; este mult mai usor.
user10489 avatar
drapel in
Nu trebuie să ucizi slujba pentru a o găsi. Încercați ps sau pgrep -f. În Ubuntu, directorul socket-ului ecranului ar trebui să fie în /run/screen/ și ar trebui să căutați acolo socket-ul ecranului.
user10489 avatar
drapel in
Probabil că îl porniți cu ecran, astfel încât să puteți interacționa cu el mai târziu. În caz contrar, sunt de acord cu @user535733 că nu ar trebui să utilizați screen pentru aceasta, ci un script systemd.
user535733 avatar
drapel cn
Ei bine, ecranul este încă necesar pentru serverul Java -- Nu am făcut ca serverul Minecraft să funcționeze fără el. Nu am găsit că nu este nevoie să interacționez cu serverul care rulează: toate intrările pot fi făcute de administrator pe client și toate ieșirile sunt înregistrate. Ceea ce face systemd este ca pornirea, oprirea și verificarea stării serverului să fie super ușoare, ușor de scriptat și uniformă cu alte servicii.Sarcina principală a Systemd este de a supraveghea serviciile, așa că poate folosi instrumentul corect pentru job.
user535733 avatar
drapel cn
Propria mea comandă de pornire (în fișierul systemd `minecraft.service`) este `ExecStart=screen -s mc -d -m java -server -Xms512M -Xmx1024M -jar server.jar nogui`
bmellot2 avatar
drapel eg
Da, îmi dau seama repede că s-ar putea să merg cu totul greșit - inițial am crezut că crontab este singura modalitate de a programa lucrări la pornire. Tocmai m-am întors după ce am încercat cele două comenzi de întreținere de bază la repornire în crontab - cea cpupower funcționează bine, dar încă nu pot face ca serverul să pornească corect... comanda pe care o aveam era ```@reboot screen -S minecraft java -Xmx6800M -Xms6800M -jar /home/filepath/server.jar nogui``` Presupunând că a eșuat, poate pentru că directoarele funcționează diferit de root? Privind acum utilizarea systemd - care este argumentul ```-server``` după java? Asta e nou pentru mine
bmellot2 avatar
drapel eg
„Așadar, comanda de pornire funcționează și vă puteți atașa din nou la o sesiune care rulează și ați descoperit pagina de manual care detaliază cum să enumerați sesiunile. Care este întrebarea la care doriți un răspuns?” Comanda de pornire funcționează, dar nu mă pot atașa din nou la sesiunea de rulare a ecranului odată ce ies din ea - este foarte ciudat pentru că îmi dă chiar și numărul ID-ului sesiunii, dar nu apare nimic folosind ecranul -r/-ls sau chiar ps/pgrep - f
drapel in
Tmux este mult mai ușor de automatizat decât ecranul.

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.