tmux 放置在 rc.local 中时不会触发

tmux 放置在 rc.local 中时不会触发

我想开始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.localsudo ~/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 aOnce 连接会话时,会获得一个 tmux 会话2 个窗户

  1. 初始会话只是由于以下原因触发的空会话tmux new-session -d -s sess1

  2. 另一个来自tmux new-window命令的命令可以使用CTRL++打开B1因为它被提及为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

相关内容