Não é possível disparar o script tmux na inicialização

3

Eu tenho um script de trigger do tmux como mencionado abaixo, rodando em Raspbian Wheezy 7.10 :

  • Etapa 1

    #!/bin/bash
    # this script is called "sess"
    
    tmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py'
    exit 0
    

Eu verifiquei o script em execução da seguinte forma:

  • primeiro executando o script python sudo /home/pi/bin/myscript.py e, em seguida, digitando o comando tmux como mencionado acima tmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py' . As duas vezes que o script é executado.

Since if a User can type and run this scripts, it is a safe assumption that the complete thing can be written as a bash script. Hence the above mentioned script 'sess'

  • Etapa 2

Eu dei a este arquivo direitos de execução através de chmod +x /home/pi/bin/sess

  • Etapa 3

Eu também tentei executar o script usando rc.local da seguinte forma:

# in the rc.local file 

/home/pi/bin/sess &
exit 0

O arquivo rc.local é acionado por um fato, já que configurei o parâmetro WLAN na inicialização para que meu Pi participe de uma rede ad-hoc.

I can clearly verify this since I can ssh into my Pi.

Observações:

Após a reinicialização, o script não é acionado. Isso pode ser verificado pelo comando tmux ls , que diz Connection to Server Failed . Também verifiquei usando sudo tmux ls incase se o superusuário tiver a sessão tmux, mas a saída for a mesma.

  • Etapa 4

Eu tentei executar o script em crontab usando:

sudo crontab -u pi -e

## inside the crontab

@reboot /home/pi/bin/sess &

Eu também tentei criar um cron job para o superusuário

sudo crontab -e

@reboot /home/pi/bin/sess &

Observações:

Após a reinicialização, o script não é executado.

  • Etapa 5

Eu criei um sub-shell no rc.local para capturar qualquer atividade do script que está sendo acionada

# in the rc.local file
(/home/pi/bin/sess &) > /tmp/tmux.log

Observações

na reinicialização e cat /tmp/tmux.log não há nada dentro do arquivo. O arquivo tmux.log é criado embora

Inferências

Ironicamente, se fizer algo como sudo /etc/rc.local ou sudo ~/bin/sess enquanto eu estiver conectado, o script será acionado perfeitamente, pois posso realmente anexar a sessão usando sudo tmux a e também ver a listagem sudo tmux ls

Mas como ele não pode ser executado no tempo de inicialização, a finalidade é inútil se não for acionada na inicialização.

Também verifiquei as variáveis de ambiente $PATH , o que realmente mostra /home/pi/bin .

Eu também tentei usar o caminho completo para o tmux em todos os meus scripts, desde que as variáveis de ambiente não sejam classificadas. Mas sem sorte

$ which tmux
$ /usr/bin/tmux

Ironically, If I follow such a step on my Ubuntu 14.04 LTS laptop the script gets triggered through my rc.local file

Outras opções

  1. Talvez tente um script% daemon init.d/ , mas não tenho certeza se rc.local e crontab não podem lidar com isso, então talvez um daemon também não use

  2. Não tenho ideia se um ~/.tmux.conf é bom.

Nota

Como você pode ver, é para o Raspberry Pi 2 Modelo B. Fiz essa pergunta no respectivo fórum, mas o moderador sugeriu que fizesse essa pergunta aqui. O segmento é aqui

também examinei este Thread no Linux Unix e tentou todos os resultados, mas, no entanto, o script falha na reinicialização

    
por Shan-Desai 07.07.2016 / 17:38

1 resposta

2

A solução mais otimizada para solucionar problemas de qualquer script desanexado usando o tmux exigirá que você use a seguinte opção em seu script de acionamento:

#!/bin/bash
# this script is called "sess"

tmux new-session -d -s sess1

# this statement is a life-saver for tmux detached sessions
tmux set-option -t sess1 set-remain-on-exit on

# In my case running the script in a new window worked
tmux new-window -d -n 'nameofWindow' -t sess1:1 'sudo /home/pi/bin/script.py'

exit 0

Agora, o script a seguir foi chamado do rc.local e o Pi foi reinicializado. Eventualmente na reinicialização quando você anexa a sessão usando sudo tmux a Uma vez obtém uma sessão do tmux com 2 janelas

  1. A primeira é apenas uma sessão vazia acionada devido a tmux new-session -d -s sess1

  2. e o outro do comando tmux new-window que pode ser aberto usando-se CTRL + B + 1 mencionado como sess1:1 ( nota: Teclas de atalho podem variar para usuário, o atalho padrão tmux (bindkeys) são CTRL + B )

Inferência

Se o script terminar com um erro, a janela mostrará a você onde o erro estava no meu caso, erros no meu script Python e, na parte inferior, ele mostrará Painel está inoperante . Assim, devido a erros no script, a sessão tmux foi encerrada sem fornecer nenhum log relevante (feedback), portanto, nenhuma saída foi registrada no /tmp/tmux.log

acima mencionado

Por isso, é sempre recomendado usar o set-remain-on-exit on ao executar scripts com o tmux caso haja falhas no script no modo desanexado

    
por 08.07.2016 / 20:18