我们在远程服务器上有一个长时间运行的进程,它会不时手动启动。不幸的是,用于连接和启动作业的 ssh 会话可能会遇到网络连接中断、内核崩溃和一大堆其他挑战。
Screen 似乎是确保进程不被中断的完美方式。但是,依赖一个人始终记住启动 screen 然后运行脚本来启动进程是一个迟早要发生的问题。我能否从脚本中检查脚本是否在 screen 内被调用?如果是,进程将继续,否则脚本将退出并显示一条消息,指示用户先运行 screen。
答案1
有一个环境变量可以解决这个问题。如果它在屏幕中运行,$TERM
则为screen
。就这么简单;只需在其上执行 if 即可。例如,
if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi
在屏幕上时将回显栏;否则为 foo。
答案2
当您使用屏幕时,为什么不使用“nohup”运行脚本?这还可以确保它在断开连接时继续运行。
它默认输出到文件,因此如果您愿意,可以使用其他工具来监视脚本输出。