Eu acho que os dois -c
parâmetros ( su
e bash
) terão que ser citados no mínimo.
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
Também -
é esperado que seja o último e pode não ser desejável aqui (veja man su
).
Mais algumas observações. sudo
poderia ser uma escolha melhor para um comando de uma tentativa como o seu, mas não necessariamente:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
Em particular, você pode usar um nível a menos de citação sudo
.
Outra coisa com a qual você deve ter cuidado é executar comandos sem caminho absoluto em um contexto privilegiado. Isso vale para su
(ou sudo
), mas também para o caminho bash
em seu comando. Você está fazendo certo com screen
.
Apenas testei o seguinte e funciona bem. Eu acho que esse -
é o principal problema em sua linha original:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Observação ruim: por que você não tmux
tenta? Eu mudei recentemente e nunca olhei para trás. A única coisa que eu precisava para mudar imediatamente foi a combinação de teclas de prefixo que por tmux
padrão é Ctrl+ B- regressar à GNU screen
's Ctrl+ A.
Ele permite dividir sua janela em um número quase arbitrário de painéis (vertical e horizontalmente) e seu formato de arquivo de configuração (incluindo o do par de status) é realmente inteligível para os seres humanos. É claro que tmux
é tão bom quanto screen
quando você simplesmente deseja executar algum programa / script não originalmente escrito como daemon em segundo plano. Se você pretende interagir com o multiplexador de terminal, recomendo vivamente tmux
.
su
ousudo
?