gpt4 book ai didi

linux - 如何在后台运行 linux 上的应用程序但保留与之交互的可能性?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:30 25 4
gpt4 key购买 nike

要求:

  • 我想在后台(当然是在启动时)在 Linux 上运行我的应用程序。

  • 我希望能够直接从控制台调用启动/停止/重启命令(它必须像/etc/init.d 一样简单 - 只需直接从控制台调用简单命令)。

  • 我希望能够调用状态 - 我希望此命令能够以某种方式获取应用程序本身返回的实际状态。我以为我可以调用一些返回字符串的方法或只使用标准输入来发送命令,但是当我执行 noup .. & 或启动-停止-守护进程时,标准输入被分离。有没有一种简单的方法可以将标准输入附加回应用程序(我已经看到我可以创建一个管道,但这很复杂)。或者在应用程序作为守护进程启动后与应用程序通信的最佳方式是什么(例如,我可以创建套接字并通过 telnet 连接,但我正在寻找更简单的解决方案和直接从控制台执行此操作的可能性,而无需先启动 telnet )?理想情况下,能够发送任何命令会很棒,但简单的状态就足够了(但同样 - 它必须与应用程序通信才能以某种方式获得该状态)

我找到了许多不同的答案。他们中的一些人说简单地使用 nohup 和 &,而另一些人说 nohup 和 & 是过时的。一些答案说使用 start-stop-daemon 或 JSvc(对于 java)。但似乎没有一个能满足我的这 3 个要求。

那么...满足所有 3 个要求的最简单可能性是什么?

附言。我不想使用屏幕。该应用程序必须作为 Linux 守护进程运行。

PPS。应用程序是用 Java 编写的,但我正在寻找不限于 Java 的通用解决方案。

最佳答案

您应该创建一个命令行工具,以您需要的方式与守护进程进行通信。该工具本身可以使用 TCP/IP 或命名管道。

然后从控制台使用cli-tool start|stop|restart|status

如果您需要在启动序列(用户登录之前)启动守护进程,您必须处理初始化系统(init.d、systemd、OpenRC 等...)。

龙在这里:

  1. 确保 init 在通过 cli 手动停止后不会重新启动您的守护程序。

  2. 命令行工具本身以非特权用户权限运行,因此如果第一个启动脚本使用 super 用户权限或特定于应用程序的用户,则重启可能会很困难,尤其是在深度 init 集成的情况下,您可能必须使用 sudo cli-tool start

为了避免这种情况,一种可能的解决方案是制作包装守护进程,它通过 init 永远运行并以适当的权限控制底层应用程序(启动-停止)。

缺点:为守护进程开发两个额外的工具。

优点:Wrapper 守护进程可以作为 super 用户/特定用户和用户空间之间的断路器。

关于linux - 如何在后台运行 linux 上的应用程序但保留与之交互的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com