如何让这个卑鄙的 bash 脚本 24/7 在后台运行?

如何让这个卑鄙的 bash 脚本 24/7 在后台运行?

这听起来可能有点重复,但先听我说完。

我运行一个 shell 脚本,它有一个活动的标准输入,有时在启动时需要一些输入。我需要它 24/7 运行,并且需要在失败时通过输入命令或在弹出提示时输入“y”来重新启动。我已经尝试过两种方法:使用 nohup 并单击 Ctrl+Z,输入 bg 都显示作业已停止且未运行。只有当我执行时fg它才会激活。有任何线索如何解决这个问题吗?

PS我也试过scriptcommand &它也以“已停止”结束。

将其设置为 systemd 服务有意义吗?

答案1

如您所描述的依赖于输入的程序需要在终端多路复用器内启动,例如tmuxhttps://en.wikipedia.org/wiki/Tmux) 或者screenhttps://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 文档有更多信息

相关内容