什么是在Linux下编写/配置应用程序的正确方式,以便它始终运行并提供外部请求(TCP、数据库、文件系统等)。
我特别不称其为守护进程,因为在Linux环境中它可能意味着我不想要的东西。
我已经阅读了多个主题,包括:
best way to write a linux daemon
Best practice to run Linux service as a different user
但它们都没有提供关于使用哪种方法的全面比较。
我看到以下选项:
- 编写应用程序,它forks,调用setpid、umask等,但这需要应用程序自己执行许多步骤(由init.d自动启动?)
- 使用daemon() init.d函数,它为您执行了大部分这些步骤(但它是否可移植到所有/许多Linux发行版)
- 在后台运行应用程序,并相信它能够在后台运行
但它们中哪一个才是正确的方法。如果它们都可以使用,那么什么构成了Linux中的守护进程?
我正在寻找在Windows下将应用程序作为服务运行的等效方法(使用sc可以自动创建任何.exe文件以作为服务运行)。
我的要求如下:
- 开机后自动启动
- 以特定的用户身份运行(非root)
- 可以访问整个文件系统(/),但创建/修改文件时使用应用程序所在用户的身份
- 可以通过service start,service stop进行控制
- 可能在崩溃或被杀后自动重启
- 可以写入syslog
- 在RHEL7下运行
我是该应用程序的作者,但希望不更改它来处理守护进程。
我的猜测是编写自定义init.d脚本,然后从/etc/init.d/functions调用daemon()函数。 我对吗?