我有一个如下所述的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
我已经检查了正在运行的脚本,如下所示:
sudo /home/pi/bin/myscript.py
,然后如上所述输入tmux命令tmux new-session -d -s sess1 'sudo /home/pi/bin/myscript.py'
。脚本运行两次。因为如果用户可以键入并运行此脚本,则可以安全地假定完整的内容可以作为bash脚本编写。因此,上述脚本“ sess”
我已经通过以下方式赋予了该文件执行权限 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 Failed
。sudo tmux ls
如果超级用户具有tmux会话,但是输出相同,我也使用了incase进行了验证。
我尝试crontab
使用以下命令运行脚本:
sudo crontab -u pi -e
## inside the crontab
@reboot /home/pi/bin/sess &
我还尝试为超级用户创建cron作业
sudo crontab -e
@reboot /home/pi/bin/sess &
重新启动后,脚本不会执行。
我在中创建了一个子外壳,rc.local
以捕获被触发的脚本的任何活动
# in the rc.local file
(/home/pi/bin/sess &) > /tmp/tmux.log
重新启动后,cat /tmp/tmux.log
文件内没有任何内容。该文件tmux.log
确实被创建
具有讽刺意味的是,如果执行类似操作sudo /etc/rc.local
或sudo ~/bin/sess
在我登录脚本时被完美触发,因为我实际上可以使用sudo tmux a
并附加会话并查看清单sudo tmux ls
但是由于它不能在启动时运行,因此如果没有在启动时触发,则该目的将无用。
我还检查了$PATH
实际显示/home/pi/bin
在其中的环境变量。
我还尝试在所有脚本中使用tmux的完整路径,因为如果环境变量可能未排序。但是没有运气
$ which tmux
$ /usr/bin/tmux
具有讽刺意味的是,如果我在Ubuntu 14.04 LTS笔记本电脑上执行此步骤,脚本将通过我的
rc.local
文件触发
也许尝试一个init.d/
守护程序脚本,但是不确定一个rc.local
和一个crontab
不能处理这个脚本,那么一个守护程序也不会
我不知道a~/.tmux.conf
是否有用。
使用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会话
最初的只是一个空会话,由于 tmux new-session -d -s sess1
另一个是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] 删除。
我来说两句