【发布时间】:2023-03-26 10:53:01
【问题描述】:
什么是在 Linux 下编写/配置应用程序的正确方法,该应用程序始终运行并服务于外部请求(TCP、数据库、文件系统,任何类型的)。
我特别不调用这个守护进程,因为它可能意味着我不希望它在 Linux 环境中。
我已经阅读了多个主题,包括:
best way to write a linux daemon
Best practice to run Linux service as a different user
但它们都没有提供关于使用哪种方法的完整比较。
我看到以下选项:
- 编写分叉、调用 setpid、umask 等的应用程序,但这 要求应用程序自行执行许多步骤; (带自动启动 通过 init.d?)
- 使用 daemon() init.d 函数为您执行大部分步骤(但它是否可移植到所有/许多 Linux 发行版)
- 使用 & 运行应用程序并信任它在后台运行
但他们中的哪一个是要走的路。或者如果它们都可以使用,那么Linux中的守护进程是什么?
我正在寻找在 windows 下作为服务运行应用程序的等效项(并且任何 .exe 都可以通过使用 sc 自动作为服务运行)。
我的要求如下:
- 开机后启动(自动)
- 以特定用户(非 root)运行
- 有权访问整个文件系统 (/),但以运行应用程序的用户身份创建/修改文件
- 可以通过service start、service stop来控制
- 可能在崩溃或终止后自动重启
- 可以写入系统日志
- 在 RHEL7 下运行
我是该应用程序的作者,但不希望对其进行更改以处理守护进程。
我的猜测是编写自定义 init.d 脚本,该脚本又会从 /etc/init.d/functions 调用 daemon() 函数。我说的对吗?
【问题讨论】: