Myślę, że oba -c
parametry ( su
i 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 bash
twojego 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 tmux
spró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 tmux
domyś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 tmux
jest tak dobra, jak screen
wtedy, 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
.
su
czysudo
?sudo
nie 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.sudo su -
...sudo
(superuser zrobić),su
(zmień użytkownika) ... dobry pomysł na temat .confsudo
może dobrze uruchomić powłokę logowania-i
.Spróbuj
sudo -u username
zamiastsu - username
źródło
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.
Źródło: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles
źródło
Uruchamianie skryptu na nowym odłączonym ekranie jako bieżący użytkownik (rc.local = root):
screen -dmS <session name> <command>
, przykład:Uruchamianie skryptu z rc.local jako
user
:źródło