我有一个 Perl 脚本,通过 Ubuntu 服务器上的终端窗口 (Win10 putty.exe) 运行一整晚。与许多家庭网络一样,我偶尔会失去互联网连接,这会终止我的连接和脚本。
通过 cron 运行另一个 Perl 脚本(检查我的脚本是否正在运行),我可以重新启动该 Perl 脚本。
但是它在没有窗口的情况下运行。
有没有一种方法,当我将 putty 放入 Ubuntu 时,我可以打开一个终端窗口,显示现在正在运行的 Perl 脚本的输出?
谢谢。
答案1
您可以将 cron 脚本的输出重定向到文件 >> /path/filename.log
或者使用屏幕启动脚本:screen -Sdm perl /path/to/script.pl
答案2
在 中运行脚本screen
,即在启动脚本之前,键入screen
(如果出现“未找到命令”,则需要先安装该screen
包)。它只会显示系统提示符,好像什么都没有改变,但现在您有了一个即使失去连接也能继续运行的虚拟终端。即使您断开连接,脚本仍会继续在该终端中运行。
断开连接后,重新连接到服务器后,键入screen -ls
。这将列出您的screen
会话。输出可能如下所示:
There is a screen on:
19923.pts-10.myserver (Detached)
1 Socket in /var/run/screen/S-myuser.
(“myserver” 和 “myuser” 分别是您的实际主机名和用户名)。如果您看到如上所示的“Detached”,则表示服务器正确注意到连接已丢失并且会话已正确断开。在这种情况下,您可以使用以下命令重新连接到该会话:
screen -r 19923
当然,数字 19923 是screen
您从screen -ls
命令中获取的进程的 PID。
但是,服务器可能没有注意到断开连接,您的screen
会话仍然“附加”到不再存在的会话。在这种情况下,您需要先断开会话,screen
然后才能重新附加,您可以通过另外指定-d
参数来执行此操作:
screen -d -r 19923
这是一种常用且事实上的标准解决方案,用于运行应受到保护以免意外关闭终端会话且即使发生这种情况也应继续运行的程序。
当您的脚本完成并返回操作系统时,exit
在操作系统提示符下输入的第一个命令将终止screen
并返回到常规终端会话(您将看到一条消息“屏幕正在终止”)。第二个exit
命令将注销您的登录。