Execute uma sessão de tela na inicialização do rc.local

9

Estou tentando executar uma tela desanexada sob um usuário específico no rc.local na inicialização. O código abaixo é o que tenho até agora, mas não está funcionando para mim. A parte su parece estar me dando um erro.

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
ATLChris
fonte

Respostas:

13

Eu acho que os dois -cparâmetros ( sue 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 bashem 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 tmuxtenta? 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 tmuxpadrã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 screenquando 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.

0xC0000022L
fonte
Vou tentar isso em alguns. O script que estou executando usa caminhos absolutos, então você recomendaria suou sudo?
ATLChris
11
sudonã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.
aquaherd
@aquaherd: é o que eu tinha em mente quando escrevi, mas não necessariamente . A pista, realmente, é na habitual sudo su -... sudo(superusuário fazer), su(usuário switch) ... boa idéia sobre o .conf
0xC0000022L
11
Devo dizer que estou marcando este post com +1 por causa de sua observação maligna. Eu amo isso! É um ótimo substituto para a tela, pois é possível forçá-lo a iniciar uma nova sessão.
The Quantum Physicist
O @aquaherd sudopode iniciar um shell de login muito bem usando -i.
muru
1

Tente em sudo -u usernamevez desu - username

profecia201
fonte
1

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.

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

Fonte: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles

Areeb Soo Yasir
fonte