UNIX 世界中 screen/tmux 的 Perl 替代品?

UNIX 世界中 screen/tmux 的 Perl 替代品?

当需要类似 screen/tmux 的解决方案时会发生什么(让进程长时间运行,但不是因为nohup可能需要交互) - 但 screen/tmux 在给定机器上不可用,并且安装 screen/compiling这不是一个解决方案吗?

问:是否有任何“短”perl 脚本可以普遍(或不普遍)用于实现此目标(在 Linux/AIX/等上)?

只需要这个:

  1. 启动perl脚本
  2. 开始需要很长时间的特定事情
  3. 从终端断开连接,例如:因为工作笔记本需要关闭
  4. 重新连接到控制台查看/控制启动的长时间运行的进程,就像在屏幕中一样

有人有这样的 perl 脚本吗?

答案1

perlIO::Pty除非安装了该模块,否则可能不是最合适的。

首先,如果给定的需要很长时间的东西(gtttlt)可以与管道一起正常工作,也许您不需要任何复杂的东西。

mkfifo input
nohup gtttlt <> input > output 2>&1 &

启动gtttlt(从命名管道输入,输出到常规文件)。然后你将其替换为:

tail -f output & cat > input

如果管道不起作用并且您需要一个终端,那么您可能需要使用可以启动伪终端的东西,例如expect, zshs zpty, perl'sIO::Ptysshd

mkfifo input
nohup ssh -tt localhost gtttlt <> input > output 2>&1

:

stty raw -echo; tail -f output & cat > input

screen请注意,这与实现or不同tmuxscreentmux实现一个终端模拟器。重新连接时,您会看到该终端模拟器的屏幕内容。在这里,当您重新附加时,您只能看到最后 10 行输出(尽管您可以通过向 传递选项-n 123来进行调整tail)。我们只是将所有数据传入/传出主机终端。

答案2

这并不完全是你所要求的,但我经常at这样做。我经常从笔记本电脑上在远程服务器上启动命令,然后希望关闭笔记本电脑而不丢失命令的输出。at允许我在给定时间启动作业,并且我只需将作业的输出和错误流重定向到文件。

例如,如果我想运行,my_script.pl我将创建一个名为foo.txt以下内​​容的小文件:

my_script.pl > out 2>er

然后运行它

$ at now < foo.txt

然后,我可以注销服务器,将笔记本电脑带回家,并通过ssh登录服务器并运行来检查输出

$ tail -f er

或者

$ tail -f out

您还可以at从其 shell 中提供作业(点击CtrlD退出):

$ at now
warning: commands will be executed using /bin/sh
at> my_script.pl > out 2>er
at> <EOT>
job 10 at Thu Sep  5 00:39:00 2013

答案3

作为上面“at”建议的替代方案,我更喜欢这个:

  1. 像平常一样启动你的 Perl 脚本“perl script.pl”
  2. 做用户交互的事情并进入需要很长时间的部分
  3. 按 ctrl+z 将其置于背景中并输入“bg”。该进程现在在后台运行
  4. 运行“jobs”来查看您的进程获得的数量。最有可能是1。
  5. 运行“disown %1”将程序与当前终端脱钩。
  6. 您现在可以安全地关闭终端(输入“exit”或只需按关闭按钮)

此外,您可以将输出重定向到文件或命名管道。不幸的是,我认为没有办法将进程再次附加到您的终端。

相关内容