ruby - 在 Ubuntu 20.04 中使用 ruby 生成 GNU 屏幕会话的问题
问题描述
我有一个安装了 Ubuntu 20.04 的工作站,我在 ruby 脚本中生成 GNU 屏幕会话时遇到了问题。
ruby 脚本必须生成一个具有自定义名称的新 GNU 屏幕会话,并将新会话附加到 VNC 服务器进程。
这是代码:
when 'screen'
sd=options[:screen_dir]
if sd then
FileUtils.mkdir_p(sd)
FileUtils.chmod 0700, sd
ENV['SCREENDIR']=sd
end
if !options.has_key?(:screen_exe) then
raise Error.new(:ExecuteRun, :option=>"screen_exe",:screen_dir=>sd, :mode => mode)
end
if !options.has_key?(:screen_conf) then
raise Error.new(:ExecuteRun, :option=>"screen_conf", :screen_dir=>sd, :mode => mode)
end
command="#{options[:screen_exe]} -L -c #{options[:screen_conf]} "+
" -dmS sessionname #{command}"
output=%x{#{command}}
status=$?.exitstatus
so1=%x{#{options[:screen_exe]} -ls}.
split.
find { |x| x =~ /^[0-9]+\.sessionname$/ }
if so1.kind_of?(Array) then
so=so1.map { |x| x.gsub(/^([0-9]+)\.sessionname$/,'\\1') }
else
so=[ so1.gsub(/^([0-9]+)\.sessionname$/,'\\1') ]
end
{ :output => output, :status => status, :pid => so[-1]}
在创建复制 screen_rc 配置并存储 GNU 屏幕日志的文件夹后,将生成一个新的屏幕会话,其中包含日志记录 (-L)、自定义名称 (-S)、分离模式 (-d)、跳过 STY 环境变量 (-米)。
我介绍了一些调试消息(例如 screen ls 命令),这些消息显示在发出命令后没有生成会话。
这种行为很奇怪,因为相同的 ruby 脚本在以前的 Ubuntu 版本(16.04 和 18.04)中运行良好。我注意到这些发行版之间的 GNU 屏幕版本不同: Ubuntu 16.04: 4.03.01 Ubuntu 18.04: 4.06.02 Ubuntu 20.04: 4.08.00
同样在重新启动工作站后,脚本立即运行......但只是第一次运行......似乎有些事情仍然悬而未决,但没有悬而未决的进程......
我找到了一个临时解决方法,将屏幕版本降级到 4.03.01(Ubuntu 16.04),使脚本也可以在 Ubuntu 20.04 中运行……但我想用新版本的 GNU 屏幕解决这个问题,以便完全移植最新版本的 Ubuntu 上的脚本。
提前感谢您的帮助!
解决方案
推荐阅读
- haskell - TeletypeIO 的 StateMonad 实例
- java - java类实例如何添加字符串?
- google-cloud-platform - 如何在 x 分钟后运行一次 Airflow DAG?
- node.js - Angular Build - Uncaught TypeError:无法读取未定义的属性“id”
- ruby - OpenSSL::SSL::SSLContext::方法
- android - 带有 Firestore 实现的单元测试功能
- python - 如何更改 .flair 目录的位置
- sql - 替换唯一行中的聚合重复值
- php - mysqli更新的php函数
- python-3.x - 无法在 giltab ci 中冻结烧瓶网站