Utwórz sesję Screen za pomocą skryptu bash, używając contab

8

Chcę, aby plik .jar był uruchamiany za każdym razem, gdy serwer uruchamia się (używamy VPS), więc edytowałem crontab, używając, crontab -ea następnie dodając @reboot bash /home/bash/startserver.sh. Ale nawet nie dotarłem do momentu, w którym skrypt działa.

Oto mój skrypt:

#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar

Powodem, dla którego muszę użyć screenjest to, że kiedy uruchamiam bukkit.jar, wchodzi do konsoli, gdzie mogę wprowadzić więcej poleceń dla tego programu (jestem pewien, że wszyscy znacie Minecraft i jego serwery na tej stronie, chociaż , haha), ale muszę być w stanie wykonywać inne polecenia jako root i dla innych programów podczas działania, a nawet zamknąć moją sesję PuTTY.

Jedynym problemem jest to, że po uruchomieniu tego skryptu tworzy sesję ekranową, ale jego identyfikator nie jest wymieniony screen -ls, ponieważ identyfikator jest pusty. Zamiast tego muszę /run/screen/S-rootznaleźć identyfikator, a następnie użyć typowego screen -X -S $name quitna nim dokumentu.

Może to nawet nie jest możliwe, a może istnieje prostszy sposób na zrobienie tego (wolałbym prostsze), ale nie mogę zrozumieć, dlaczego to nie działa. A jeśli to możliwe, czy można ponownie dołączyć do sesji screen -S bukkitpodczas uruchamiania skryptu bash? (Chyba wiele pytań, ale bardzo dziękuję za pomoc! (Nawiasy))

Jacob Larson
źródło

Odpowiedzi:

15

Uruchom ekran w trybie odłączonym i uruchom w nim polecenie:

screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'

Możesz utworzyć dedykowany skrypt bukkit.sh:

#!/bin/bash -e
cd ~/server
java -jar bukkit.jar

Aby skrypt stał się bardziej złożony, nie musisz pisać długiej linii screen, a więc screenpolecenie może pozostać bez zmian, po prostu:

screen -d -m -S bukkit path/to/bukkit.sh
janos
źródło
1
Próbowałem zrobić obie opcje, jedną z jednym dłuższym plikiem, a następnie drugą z dwoma oddzielnymi plikami, ale teraz sesja ekranowa w ogóle się nie tworzy. Próbowałem uruchomić polecenia bezpośrednio z wiersza poleceń, ale to też nie zadziałało ..: /
Jacob Larson
Czy pojawia się komunikat o błędzie lub coś takiego? Najpierw bukkit.shuruchom skrypt działający w wierszu polecenia. Następnie sprawdź, czy screen -S bukkit path/to/bukkit.shdziała. Następnie sprawdź, czy screen -d -m -S bukkit path/to/bukkit.shdziała. Na koniec ustaw crona. Najpierw wypróbuj najprostszą rzecz i zrób małe kroki, aby zrozumieć, który krok dzieli. Powiedz mi, a otrzymasz komunikat o błędzie, jeśli potrzebujesz pomocy.
Janos
1

Należy update-rc.dw następujący sposób, aby włączyć usługę na starcie:

# update-rc.d cron defaults
Maythux
źródło
@JacobLarson Nie ma za co. Lepiej zaznaczyć jako odpowiedź i głosować, jeśli to ci pomoże
Maythux