这听起来可能有点重复,但先听我说完。
我运行一个 shell 脚本,它有一个活动的标准输入,有时在启动时需要一些输入。我需要它 24/7 运行,并且需要在失败时通过输入命令或在弹出提示时输入“y”来重新启动。我已经尝试过两种方法:使用 nohup 并单击 Ctrl+Z,输入 bg 都显示作业已停止且未运行。只有当我执行时fg
它才会激活。有任何线索如何解决这个问题吗?
PS我也试过scriptcommand &
它也以“已停止”结束。
将其设置为 systemd 服务有意义吗?
答案1
如您所描述的依赖于输入的程序需要在终端多路复用器内启动,例如tmux
(https://en.wikipedia.org/wiki/Tmux) 或者screen
(https://www.gnu.org/software/screen/)。将其视为终端窗口的基于文本的版本。
使用screen my-program
来启动my-program
.然后你可以分离从虚拟屏幕控制台使用击键组合Ctrl- A Ctrl- D,您将返回到开始的 shell,但您的程序仍在后台运行。然后,使用screen -r
您可以重新连接到虚拟控制台。
screen(和您的程序)将继续运行,直到您的程序退出或服务器重新启动。
tmux
非常相似,但具有更多选项和功能,并使用不同的键盘快捷键。
答案2
要使脚本继续在后台运行,请使用 nohup: nohup scriptcommand &
。理想情况下,脚本可以选择不提示输入。如果由于某种原因这不是一个选择,预计可用于输入“y”。
为脚本创建 systemd 服务将允许在系统重新启动时启动脚本。Restart=always
如果服务退出或终止,您还可以在 systemd 文件中使用来重新启动服务,systemd 文档有更多信息。