我的 shell 脚本运行时间很长,大约 30 分钟,但如果我离开并出去吃午饭,我对此表示怀疑:
1:如果脚本正在运行,putty会话是否会关闭?
2:如果putty会话关闭,则脚本将退出。
我使用的话nohup scriptname
可以嗎?
答案1
PuTTY(或任何其他 SSH 客户端)并不关心您是在看屏幕还是出去吃午饭。它不会自行关闭会话。
仅当出现以下情况时,会话才会关闭:
- 您手动关闭它(例如,输入
logout
,Ctrl+ D,exit
等等) - 您的 shell 中设置了自动注销或空闲触发器。
- 网络连接中断。
后者不应该随机发生,尽管较差的设备可能会在认为连接空闲时“主动”关闭连接。这种情况通常发生在内存很少的 SOHO 设备上,当它们猜测不再使用连接时会主动关闭连接。
到目前为止,我们已经了解了 puTTY 和会话。至于nohup
,让我们更深入地了解一下。
早期人们使用电话线和调制解调器拨号。有时这种连接会中断。在这种情况下,shell 会收到线路检测到挂断的信号。(信号 1,HUP)。
当发生这种情况时,shell 会向正在运行的程序发出 SIGHUP 信号,其基本含义是“电话线断了。请正常关机。(关闭文件、必要时保存等)。
当您注销或 puTTY (ssh) 死亡时,也会发生同样的情况。
如果你运行一个程序,nohup
那么会发生两件事:
- SIGHUP 被忽略。因此程序不会关闭。
- 标准输出被写入文件(默认值:)
nohup.out
而不是 TTY。
我使用的话
nohup scriptname
可以嗎?
如果您使用nohup scriptname
并且脚本不需要任何输入,那么可以。如果您想在脚本运行时查看其输出,可以 tail 日志文件。
nohup scriptname &
tail -f nohup.out
除此之外,nohup
至少还有另外两个有趣的选择:
两者不仅可以让您在线路断开的情况下继续工作,还可以稍后重新连接终端。
例子:
坐在计算机-1 后面,登录服务器-1
screen
开始屏幕
make bzimage
您想要的任何任务/脚本
Ctrl+ A, Ctrl+D分离;
screen
似乎已经结束
logout
注销
此时screen
仍在运行并为您的脚本提供shell。
假设你回到家,坐在自己的电脑前,通过 ssh 连接到 server-1,
ssh server-1.work.tld
用户名
密码
screen -r
(继续之前添加的屏幕)
︙
继续您上次中断的工作。