Eu quero começar umtmuxna inicialização em um raspberry pi - 2. Eu escrevi um session.sh
arquivo e coloquei-o no ~/bin/
arquivo que está no diretório inicial. Isso ~/bin/
também está incluído no $PATH
e, 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.local
ou sudo ~/bin/session.sh
a 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.txt
nada 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.local
e o Pi foi reiniciado. Eventualmente, na reinicialização, quando você anexa a sessão usando sudo tmux a
Once obtém uma sessão tmux com2 janelas
A inicial é apenas uma sessão vazia acionada devido a
tmux new-session -d -s sess1
e o outro do
tmux new-window
comando que pode ser aberto usando CTRL+ B+ 1já que foi mencionado comosess1: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 on
ao executar scripts com tmux caso haja falhas no script em modo desanexado
Responder2
Acho que rc.local
o ambiente durante a inicialização não é rico. Se ele conhece alguma $PATH
e $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.local
ou sudo ~/bin/session.sh
o comando herdaseuambiente e todas as obras.
Para consertar, use o caminho completo em vez de ~/
. Use o caminho completo para tmux
também.