Uruchom sesję ekranową podczas rozruchu z rc.local

10

Próbuję uruchomić odłączony ekran pod określonym użytkownikiem w pliku rc.local podczas rozruchu. Poniższy kod jest tym, co mam do tej pory, ale nie działa dla mnie. Wydaje się, że część su daje mi błąd.

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
ATLChris
źródło

Odpowiedzi:

13

Myślę, że oba -cparametry ( sui bash) będą musiały być cytowane co najmniej.

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"

-Oczekuje się również, że będzie ostatni i może nie być tutaj pożądany (patrz man su).


Jeszcze kilka uwag. sudo może być lepszym wyborem dla takiego polecenia, jak twoje, ale niekoniecznie:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

W szczególności możesz użyć o jeden poziom cytowania mniejszy niż sudo.

Kolejną rzeczą, na którą chcesz uważać, jest wykonywanie poleceń bez bezwzględnej ścieżki w uprzywilejowanym kontekście. Dotyczy to su(lub sudo), ale także ścieżki do bashtwojego polecenia. Robisz to dobrze screen.

Właśnie przetestowałem następujące i działa dobrze. Myślę, że to -jest główny problem w twojej oryginalnej linii:

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

Zła uwaga: dlaczego nie tmuxspróbujesz? Ostatnio się zmieniłem i nigdy nie oglądałem się za siebie. Jedyną rzeczą, że muszę natychmiast zmienić była kombinacja klawiszy prefiks, który w tmuxdomyślnych do Ctrl+ B- powrót do GNU screen„s Ctrl+ A.

Pozwala podzielić okno na prawie dowolną liczbę paneli (pionowo i poziomo), a jego format pliku konfiguracyjnego (w tym ten dla parametru statusu) jest w rzeczywistości zrozumiały dla ludzi. Oczywiście tmuxjest tak dobra, jak screenwtedy, gdy chcesz po prostu uruchomić program / skrypt, który nie był pierwotnie napisany jako demon w tle. Jeśli jednak zamierzasz współpracować z terminalowym multiplekserem, gorąco polecam tmux.

0xC0000022L
źródło
Spróbuję za kilka. Skrypt, który uruchamiam, używa ścieżek bezwzględnych, więc poleciłbyś suczy sudo?
ATLChris
1
sudonie jest dobrym wyborem, jeśli uruchomisz z rc.local, gdzie już jesteś rootem, ponieważ przegapisz powłokę logowania. Na marginesie, spójrz /etc/init/tty1.conf- zamień [a] getty na screen tutaj.
aquaherd
@aquaherd: to właśnie miałem na myśli, kiedy pisałem, ale niekoniecznie . Wskazówka, naprawdę, jest w zwykłym sudo su -... sudo(superuser zrobić), su(zmień użytkownika) ... dobry pomysł na temat .conf
0xC0000022L
1
Muszę powiedzieć, że daję +1 temu postowi tylko z powodu twojej złej uwagi. Kocham to! To świetny zamiennik ekranu, ponieważ można zmusić go do rozpoczęcia nowej sesji.
Fizyk kwantowy
@aquaherd sudomoże dobrze uruchomić powłokę logowania -i.
muru
1

Spróbuj sudo -u usernamezamiastsu - username

proroctwo201
źródło
1

Oto, czego użyłem, uznałem, że jest najczystszy i najprostszy (przetestowałem samemu działanie):

Zamień „użytkownik” na użytkownika, aby uruchomić go jako. Zamień „nameyouchoose” jako nazwę sesji ekranowej Zamień „/script/start.bash” na ścieżkę skryptu.

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

Źródło: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles

Areeb Soo Yasir
źródło
0

Uruchamianie skryptu na nowym odłączonym ekranie jako bieżący użytkownik (rc.local = root):

screen -dmS <session name> <command>, przykład:

screen -dmS screenName bash /home/user/run.sh


Uruchamianie skryptu z rc.local jako user:

runuser -l user -c 'screen -dmS screenName bash /home/user/run.sh'

DaWe
źródło