我在服务器上有一个可执行文件,它是一个成熟的独立 Web 应用程序。当我通过 ssh 登录服务器并运行该文件时,该网站在互联网上可见。显然,因为它是由我通过 ssh 运行的,所以当我断开连接时,网站就会崩溃。
24/7 运行该文件并最好在它出现故障时重新启动的惯用且简单的方法是什么?
这是 Ubuntu 15,但我的问题不仅仅与它有关。
我不想使用任何第三方解决方案或 Web 服务,只想使用标准的 Linux 工具和应用程序。
我应该为 systemd 创建一个服务吗?
答案1
是的,您需要使成熟的 Web 服务器可执行服务。更喜欢使用非 root 帐户来使用该服务——我什至会说这是强制性的——以限制网络服务器受到损害时造成的损失。我思考1 systemd
有足够的文档来指导您完成所需的步骤。
1我不跑systemd
,万一出现问题……
答案2
在旧式初始化系统上,您可以使用良好的旧式启动-停止-守护进程应用程序,该应用程序负责在进程终止时重新启动进程。只需执行以下操作:
start-stop-daemon --start --background --exec /path/to/your/executable
它还允许为您正在运行的进程设置调度优先级、IO 优先级等。
在启用 systemd 的系统上,您还可以(甚至更好)创建您提到的 systemd 服务单元。它会做同样的事情,但使用 systemd 功能而不是单独的启动-停止-守护进程调用。有关详细信息,请参阅例如此处:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html
答案3
- 简单的方法
/home/user/start_service.sh
创建一个包含以下内容的脚本(例如):
#!/bin/sh
while true; do
path/to/service/executable
done
并将其添加到/etc/rc.local:
#!/bin/sh -e
su user -c '/home/user/start_service.sh' &
exit 0
然后手动启动脚本:
/home/user/start_service.sh
这样您就可以忘记您的网络应用程序了。它将在系统启动时自动启动。
- 正确的方法:
使用类似的工具系统并upstart
从您的应用程序创建服务。