Acho que os parâmetros -c
( su
e bash
) precisarão 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 opção melhor para um comando de ação única 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 de cotação a menos com sudo
.
Outra coisa que você deve tomar cuidado é executar comandos sem caminho absoluto em um contexto privilegiado. Isso vale para su
(ou sudo
), mas também para o caminho para bash
em seu comando. Você está fazendo certo com screen
.
Apenas testamos o seguinte e funciona bem. Eu acho que o -
é o principal problema na sua linha original:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Observação negativa: por que você não tenta tmux
tentar? Eu mudei recentemente e nunca olhei para trás. A única coisa que eu precisava mudar imediatamente era a combinação de prefixo que em tmux
usa como padrão Ctrl + B - de volta ao Ctrl do GNU screen
+ A .
Permite dividir sua janela em um número quase arbitrário de painéis (verticalmente e horizontalmente) e seu formato de arquivo de configuração (incluindo o do status par) é realmente inteligível para humanos. É claro que tmux
é tão bom quanto screen
quando você simplesmente quer executar algum programa / script não escrito originalmente como daemon em segundo plano. Se você pretende interagir com o multiplexador de terminais, no entanto, recomendo vivamente tmux
.