无法在启动时触发tmux脚本

Shan-Desai

我有一个如下所述的tmux触发脚本,在Raspbian Wheezy 7.10上运行

  • 步骤1

    #!/bin/bash
    # this script is called "sess"
    
    tmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py'
    exit 0
    

我已经检查了正在运行的脚本,如下所示:

  • 首先,通过运行python脚本sudo /home/pi/bin/myscript.py,然后如上所述输入tmux命令tmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py'脚本运行两次。

因为如果用户可以键入并运行此脚本,则可以安全地假定完整的内容可以作为bash脚本编写。因此,上述脚本“ sess”

  • 第2步

我已经通过以下方式赋予了该文件执行权限 chmod +x /home/pi/bin/sess

  • 第三步

我也尝试使用rc.local以下命令运行脚本

# in the rc.local file 

/home/pi/bin/sess &
exit 0

rc.local由于我在启动时为Pi设置了WLAN参数以加入Ad-Hoc网络,因此触发了文件

因为可以ssh进入Pi,所以我可以清楚地验证这一点

观察结果:

重新启动后,脚本不会触发。这可以通过tmux ls命令验证Connection to Server Failedsudo tmux ls如果超级用户具有tmux会话,但是输出相同,我也使用了incase进行了验证

  • 第4步

我尝试crontab使用以下命令运行脚本

sudo crontab -u pi -e

## inside the crontab

@reboot /home/pi/bin/sess &

我还尝试为超级用户创建cron作业

sudo crontab -e

@reboot /home/pi/bin/sess &

观察结果:

重新启动后,脚本不会执行。

  • 第5步

我在中创建了一个子外壳rc.local以捕获被触发的脚本的任何活动

# in the rc.local file
(/home/pi/bin/sess &) > /tmp/tmux.log

观察结果

重新启动后,cat /tmp/tmux.log文件内没有任何内容。该文件tmux.log确实被创建

推论

具有讽刺意味的是,如果执行类似操作sudo /etc/rc.localsudo ~/bin/sess在我登录脚本时被完美触发,因为我实际上可以使用sudo tmux a附加会话并查看清单sudo tmux ls

但是由于它不能在启动时运行,因此如果没有在启动时触发,则该目的将无用。

我还检查了$PATH实际显示/home/pi/bin其中的环境变量

我还尝试在所有脚本中使用tmux的完整路径,因为如果环境变量可能未排序。但是没有运气

$ which tmux
$ /usr/bin/tmux

具有讽刺意味的是,如果我在Ubuntu 14.04 LTS笔记本电脑上执行此步骤,脚本将通过我的rc.local文件触发

进一步的选择

  1. 也许尝试一个init.d/守护程序脚本,但是不确定一个rc.local和一个crontab不能处理这个脚本,那么一个守护程序也不会

  2. 我不知道a~/.tmux.conf是否有用。

Shan-Desai

使用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 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

现在,从中调用了以下脚本,rc.local然后重新启动了Pi。最终在重新启动时,使用sudo tmux a一次附加会话时,将获得带有2个窗口的tmux会话

  1. 最初的只是一个空会话,由于 tmux new-session -d -s sess1

  2. 另一个是tmux new-window可以使用CTRL+ B+打开命令中的另一个,1因为它被提到为sess1:1注意:热键可能因用户而异,默认的tmux热键(bindkeys)为CTRL+ B

推理

如果脚本以错误结尾,则在我的Python脚本中,窗口将向您显示错误所在的位置(在我的情况下是错误),在底部,它将显示Pane is Dead因此,由于脚本中的错误,tmux会话在没有给出任何相关日志(反馈)的情况下退出,因此在上述内容中未记录任何输出/tmp/tmux.log

因此,始终建议set-remain-on-exit on在运行脚本时使用带有tmux的脚本,以防在分离模式下脚本中出现错误

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

启动时无法运行脚本

来自分类Dev

脚本在启动时无法正确运行

来自分类Dev

启动时无法运行python脚本

来自分类Dev

Tmux [在启动时退出]

来自分类Dev

启动时的PHP循环脚本无法启动

来自分类Dev

无法在Raspberry Pi启动时执行python脚本

来自分类Dev

我在 Maya 启动时无法运行 python 脚本

来自分类Dev

tmux在启动时显示配置

来自分类Dev

如何在服务器启动时在tmux中运行我的脚本

来自分类Dev

rc.local中的脚本(在启动时启动),无法启动

来自分类Dev

在Linux启动时启动脚本

来自分类Dev

使python脚本在启动时自行启动

来自分类Dev

systemd-udevd无法在启动时启动触发器

来自分类Dev

配置(IAppBuilder)在启动时未触发

来自分类Dev

当konsole / yakuake启动时,如何自动启动tmux?

来自分类Dev

如何在终端启动时正确启动tmux?

来自分类Dev

如何在终端启动时正确启动tmux?

来自分类Dev

当konsole / yakuake启动时,如何自动启动tmux?

来自分类Dev

Docker容器无法在启动时启动

来自分类Dev

会话启动时Guake无法启动

来自分类Dev

systemd服务无法在启动时启动

来自分类Dev

iscsi无法在启动时启动

来自分类Dev

iscsi无法在启动时启动

来自分类Dev

网络无法在启动时启动

来自分类Dev

网络无法在启动时启动

来自分类Dev

我无法在启动时启动dnsmasq

来自分类Dev

服务无法在启动时启动

来自分类Dev

Firewalld无法在启动时启动

来自分类Dev

systemd解析无法在启动时启动