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
?sudo
não é uma boa escolha se for executado a partir do rc.local onde você já é root, pois você perderá um shell de login. Em uma nota lateral, dê uma olhada/etc/init/tty1.conf
- substitua [a] getty pela tela aqui.sudo su -
...sudo
(superusuário fazer),su
(usuário switch) ... boa idéia sobre o .confsudo
pode iniciar um shell de login muito bem usando-i
.Tente em
sudo -u username
vez desu - username
fonte
Aqui está o que eu usei, achei que era o mais limpo e mais simples (testado trabalhando sozinho):
Substitua "usuário" pelo usuário para executá-lo como. Substitua "nameyouchoose" como o nome da sessão da tela Substitua "/script/start.bash" no caminho do seu script.
Fonte: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles
fonte