因此,我有一个bash脚本,该脚本首先要求用户提供一系列三个变量。然后,我希望脚本在与会话断开的后台运行,以便当我断开笔记本电脑与超级计算机之间的连接时,脚本仍将运行。
要求变量将echo与看起来像这样的代码一起使用:
echo "What is limit for low level optimization?" #ask for low limit
read low
echo "What is limit for high level optimization?" #ask for high limit
read high
echo "What method?" #ask for method
read input
然后继续执行一系列命令。
但是,我无法弄清楚如何从会话中成功断开此作业。上一次“ disown”命令无效,因为未创建我注销后应该在步骤中生成的文件。
据我了解,nohup在这里不起作用,因为这会阻止它读取脚本一开始要求我输入的任何内容。
那么有没有办法设置呢?
您可以通过模拟nohup
脚本第二部分中的内容来实现。
该nohup
命令的作用不仅仅在于:
重定向标准文件描述符,以便脚本不会尝试读取或写入终端。
捕获SIGHUP信号并忽略它。SIGHUP是进程在其控制终端关闭时得到的结果。如果忽略它,则进程在关闭其终端后将继续运行。
您可以使用以下脚本完成此操作:
echo "What is limit for low level optimization?" #ask for low limit
read low
echo "What is limit for high level optimization?" #ask for high limit
read high
echo "What method?" #ask for method
read input
(
trap '' 1 # Ignore SIGHUP
# Series of long running commands
# using $low, $high and $input
) </dev/null >myscript.log 2>&1 &
最后一行会将stdin从/ dev / null重定向,并将stdout和stderr都重定向到一个myscript.log
(您可以选择一个更好的文件名,并可以使用时间戳或类似的时间戳来使其唯一)。
最后,您将整个过程放在背景中并带有final &
。
另一种可能性是一分为二的剧本,有第二个起飞low
,high
并input
作为命令行参数,或者可能因为出口环境变量,然后运行使用第二部分实际的 nohup
命令。这应该更简单,更灵活一些,因为您可以编写第二部分的脚本,而不必处理交互式提示。
另一种可能性是使用诸如tmux
或的终端多路复用器screen
,以便在断开连接时可以重新连接到会话(或者可以自己分离会话),还可以在脚本继续运行的同时打开新窗口以运行新的shell。初始窗口。无论您是实施上述解决方案之一,采用tmux
还是screen
都会是一个好主意,因此,如果可以的话,请尝试一下。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句