tmux não dispara quando colocado em rc.local

tmux não dispara quando colocado em rc.local

Eu quero começar umtmuxna inicialização em um raspberry pi - 2. Eu escrevi um session.sharquivo e coloquei-o no ~/bin/arquivo que está no diretório inicial. Isso ~/bin/também está incluído no $PATHe, portanto, pode ser acionado.

O arquivo Bash se parece com isto:

#!/bin/sh

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

exit 0

Eu tenho dadoexecuçãodireitos para todos os scripts, incluindo o script bash mencionado acima também usandochmod +x session.sh

Norc.localRefiro-me a acionar este arquivo da seguinte maneira:

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

scriptSession
exit 0

Tentei reiniciar meu Pi várias vezes, mas a sessão nunca foi acionada.

quando executo sudo tmux ls, apenas mostraerror Connecting to Server

no entanto, quando eu faço sudo /etc/rc.localou sudo ~/bin/session.sha sessão começa! Não quero que isso aconteça, pois quero o início automático na inicialização e não uma sessão acionada 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 norc.localarquivo:

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

mas cat /var/log/myLog.txtnada aparece e o script ainda falha

Responder1

A solução mais otimizada para solucionar qualquer script desanexado usandotmuxexigirá 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 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 rc.locale o Pi foi reiniciado. Eventualmente, na reinicialização, quando você anexa a sessão usando sudo tmux aOnce obtém uma sessão tmux com2 janelas

  1. A inicial é apenas uma sessão vazia acionada devido atmux new-session -d -s sess1

  2. e o outro do tmux new-windowcomando que pode ser aberto usando CTRL+ B+ 1já que foi mencionado como sess1:1(observação:As teclas de atalho podem variar de acordo com o usuário, as teclas de atalho padrão do tmux (bindkeys) são CTRL+ B)

Inferência

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

Portanto, é sempre recomendado usar set-remain-on-exit onao executar scripts com tmux caso haja falhas no script em modo desanexado

Responder2

Acho que rc.localo ambiente durante a inicialização não é rico. Se ele conhece alguma $PATHe $HOME(o shell se expande ~para $HOME), elas não são suas variáveis ​​(do usuário normal); Eu acho que eles podem estar indefinidos. Além disso, o script herdará este ambiente limitado.

No entanto, quando você faz sudo /etc/rc.localou sudo ~/bin/session.sho comando herdaseuambiente e todas as obras.

Para consertar, use o caminho completo em vez de ~/. Use o caminho completo para tmuxtambém.

informação relacionada