我想开始tmux在 raspberry pi 上启动时 - 2. 我已经编写了一个session.sh
文件,并将其放在~/bin/
主目录中的文件中。这~/bin/
也包括在内$PATH
,因此可以触发它。
Bash 文件如下所示:
#!/bin/sh
mySession(){
tmux new-session -d -s SessionName
tmux new-window -d -n 'windowName' "~/bin/myPythonScript.py"
}
mySession
exit 0
我给了执行包括上面提到的 bash 脚本在内的所有脚本的权限chmod +x session.sh
在里面rc.本地我引用触发此文件的方式如下:
#!/bin/sh
scriptSession(){
echo "starting the tmux session"
~/bin/session.sh &
}
scriptSession
exit 0
我尝试过多次重新启动我的 Pi,但会话从未被触发。
当我执行时sudo tmux ls
,它只显示error Connecting to Server
但是当我这样做sudo /etc/rc.local
或sudo ~/bin/session.sh
会话开始时!我不希望发生这种情况,因为我希望在启动时自动启动,而不是用户触发的会话
知道可能是什么问题吗?
编辑
我还尝试使用下面的内容在 bash 子 shell 中收集失败日志rc.本地文件:
(scriptSession)&>>/var/log/myLog.txt
但cat /var/log/myLog.txt
什么也没有出现,脚本仍然失败
答案1
使用以下方法解决任何分离脚本问题的最优化解决方案tmux将要求您在触发脚本中使用以下选项:
#!/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
现在从调用了以下脚本,rc.local
然后重新启动了 Pi。最终在重新启动时,当您使用sudo tmux a
Once 连接会话时,会获得一个 tmux 会话2 个窗户
初始会话只是由于以下原因触发的空会话
tmux new-session -d -s sess1
另一个来自
tmux new-window
命令的命令可以使用CTRL++打开B,1因为它被提及为sess1:1
(笔记:热键可能因用户而异,默认的 tmux 热键(bindkeys)是CTRL+ B)
推理
如果脚本以错误结束,窗口将显示错误的位置(在我的情况下是 Python 脚本中的错误),底部将显示Pane 已死。因此由于脚本中的错误tmux会话退出时没有提供任何相关日志(反馈),因此上面提到的没有记录任何输出/tmp/tmux.log
因此,在使用 tmux 运行脚本时,始终建议使用,set-remain-on-exit on
以防脚本在分离模式下出现故障
答案2
我认为rc.local
启动期间的环境并不丰富。如果它知道任何$PATH
并且$HOME
(shell 扩展~
为$HOME
),它们不是您的(普通用户的)变量;我认为它们可能未设置。此外,脚本将继承这个有限的环境。
但是当你这样做sudo /etc/rc.local
或者sudo ~/bin/session.sh
命令继承你的环境和所有工作。
要修复此问题,请使用完整路径而不是~/
。也使用完整路径tmux
。