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.
suczysudo?