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
?