Jak użyć crontab do rozpoczęcia sesji ekranowej?


12

Chcę utworzyć wpis crontab, aby uruchamiał ekran, uruchamiał serwer gier i odłączał się. Dzieje się tak w przypadku, gdy serwer zostanie zrestartowany i chcę, aby automatycznie to dla mnie uruchomił.

0 0 0 0 0 (polecenie)

powinien działać podczas uruchamiania.

Działa plik powłoki znajdujący się w ~ / cube / server.sh


Czy jesteś użytkownikiem tego komputera, czy masz dostęp do skryptów inicjujących?
Corey S.,


@Dennis: Tak, podoba mi się to. Ale nie możemy założyć, że serwer gry, na którym działa, nie ma jakiejś konsoli, do której musiałby uzyskać dostęp (tj. Zawsze działa na pierwszym planie). W przeciwnym razie, dlaczego miałby zawracać sobie głowę ekranem? Chyba że oczywiście nie jest świadomy niczego i tła.
Corey S.

Jestem użytkownikiem tego komputera.
Victor

Odpowiedzi:


15

Coś takiego powinno działać. Ten przykład odradza ekran i uruchamia „top”:

screen -d -m top

Jak wskazano, w swoim crontabie chcesz zrobić coś takiego:

@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver

Oczywiście, jeśli serwer gry wymaga „normalnego” zestawu środowiska, możesz podejść bliżej poprzez:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)

1
co robi ta . ~/.profileczęść?
Victor

Wymusza ustawienie środowiska dla wpisu cron. Bez tego dostajesz tylko kilka bardzo konkretnych wpisów. (Szczegóły patrz crontab człowieka)
Corey S.,

Mam plik .sh, który wykonuje serwer gry, więc czy to zadziała? @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
Victor

To prawdopodobnie najlepszy sposób, aby to zrobić. Jeśli to zadziała, prawdopodobnie nie musisz się martwić o profil, ale jeśli potrzebujesz pełnej $ PATH itp., Zawsze możesz pobrać plik .profile ze skryptu server.sh.
Corey S.,

5

To powinno wystarczyć ... uciekać

$ crontab -e

Następnie wprowadź:

@reboot screen -dmS Victor

Czy możesz spróbować wyjaśnić, w jaki sposób to polecenie „Victor” odnosi się do uruchamiania skryptu - np. Skryptu, o który prosi OP?
Patrick,

1
-S jest tylko dla nazwy sesji
atx

4

Dla zachowania kompletności możliwe jest również użycie tmux w tym celu zamiast screen(zobacz ten link dla porównania):

@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"

0

Miałem podobną sytuację, ale z powodu innych nieuzasadnionych ograniczeń nie mogłem używać crontab. Właściwie miałem ekran połączenia inittab. (zastąpiono niektóre nazwy, aby ukryć informacje):

XXX:5:respawn:/bin/su - useraccount -c "screen -D -m -c /home/xxxxxx/file.screenrc"

W 'file.screenrc' ustawiam kilka opcji:

sessionname obscuresessionname
multiuser on
cd
screen /home/xxxxxxx/programtostart

W ten sposób zaczął się przy rozruchu, a jeśli program zginie lub ekran zostanie zamknięty, odrodzi się ponownie. Może nie było to uważane za konwencjonalne, ale musiałem obejść kilka dziwnych wymagań środowiskowych. Gdybyśmy jednak musieli to usunąć, musielibyśmy skomentować tę linię i zabić sesję. Gdy będziesz gotowy, aby przywrócić go z powrotem, odkomentuj i rozpocznij q.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.