tmux não dispara quando colocado em rc.local

0

Eu quero começar um tmux na inicialização em um pi framboesa - 2. Eu escrevi um arquivo session.sh e eu tenho coloca-o no arquivo ~/bin/ que está no diretório inicial. Esse ~/bin/ também está incluído no $PATH e, portanto, pode ser acionado.

O arquivo Bash é assim:

#!/bin/sh

mySession(){
     tmux new-session -d -s SessionName
     tmux new-window -d -n 'windowName' "~/bin/myPythonScript.py"
}
mySession

exit 0

Eu dei execução direitos a todos os scripts incluindo o script bash mencionado acima usando chmod +x session.sh

No rc.local , refiro-me a disparar este arquivo da seguinte forma:

#!/bin/sh
scriptSession(){
        echo "starting the tmux session"
        ~/bin/session.sh &
}

scriptSession
exit 0

Eu tentei reiniciar o meu Pi muitas vezes, mas a sessão nunca é acionada.

quando executo sudo tmux ls , ele mostra apenas error Connecting to Server

no entanto, quando eu faço sudo /etc/rc.local ou sudo ~/bin/session.sh a sessão começa! Eu não quero que isso aconteça desde que eu quero iniciar automaticamente na inicialização não uma sessão desencadeada pelo usuário

Alguma ideia do que poderia ser o problema?

Editar

Eu também tentei coletar um log de falhas em um subshell bash usando o seguinte no arquivo rc.local :

(scriptSession)&>>/var/log/myLog.txt

mas sobre cat /var/log/myLog.txt nada aparece e o script ainda falha

    
por Shan-Desai 21.06.2016 / 20:27

2 respostas

1

A solução mais otimizada para solucionar problemas de qualquer script desanexado usando 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, a tecla de acesso tmux padrão (bindkeys) é 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 / 22:34
0

Acho que rc.local ambiente durante a inicialização não é rico. Se ele souber qualquer $PATH e $HOME (o shell expande ~ para $HOME ) eles não são variáveis do seu (usuário regular); Eu acho que eles podem ser unset. Além disso, o script herdará esse ambiente limitado.

No entanto, quando você executa sudo /etc/rc.local ou sudo ~/bin/session.sh , o comando herda seu ambiente e todas as obras.

Para corrigir, use o caminho completo em vez de ~/ . Use o caminho completo para tmux também.

    
por 21.06.2016 / 21:01

Tags