linux将程序配置成守护进程,c – 编写linux守护进程

在Linux下编写/配置应用程序的正确方法是什么,它始终运行并提供外部请求(TCP,数据库,文件系统,任何类型).

我特意不要调用这个守护进程,因为它可能意味着我不想在Linux环境中使用它.

我已经阅读了多个主题,包括:

但是没有一个能够充分比较使用哪种方法.

我看到以下选项:

>编写应用程序,分叉,调用setpid,umask等,但这个

要求应用程序自己执行许多步骤; (使用自动启动

通过init.d?)

>使用daemon()init.d函数为您执行大部分步骤(但它可以移植到所有/许多Linux发行版)

>运行应用程序&并相信它在后台运行

但是他们中的哪一个是要走的路.或者如果它们都可以使用,那么Linux中的守护进程是什么?

我正在寻找相当于在Windows下运行应用程序作为服务(并且任何.exe都可以自动生成,作为使用sc的服务运行).

我的要求如下:

>启动后启动(自动)

>作为特定用户(不是root)运行

>可以访问整个文件系统(/),但创建/修改文件作为运行应用程序的用户

>可以通过服务启动,服务停止来控制

>崩溃或杀死后可能会自动重启

>可以写入syslog

>在RHEL7下运行

我是应用程序的作者,但不希望改变它以处理守护进程.

我的猜测是编写自定义init.d脚本,然后从/etc/init.d/functions调用daemon()函数.我对吗?

解决方法:

RHEL7使用systemd作为其初始化系统,它将满足您的大部分需求.您应该为您的守护程序编写一个systemd unit file(在systemd用语中称为service).它可以:

>自动启动:是的,使用systemctl启用你的服务.

>以特定用户身份运行:是,在单元文件中设置User密钥.

>可以访问整个文件系统:是的,它将拥有您配置的用户拥有的所有权限,并以该用户身份创建文件.

>可以通过服务启动来控制:是,或通过systemctl启动.

>崩溃后自动重启:是,在单元文件中设置Restart密钥(例如,故障或始终).

>写入syslog:程序写入标准输出的任何输出都将写入systemd日志,可以根据需要使用journalctl查看和/或写入syslog.

在现代init系统下运行时,您的应用程序不需要(也不应该)守护自身.这不仅适用于systemd,也适用于暴发户,以及runit,daemontools,supervisord和其他大多数主管.守护进程有点挑剔,容易出错.只需像往常一样编写应用程序,然后让init系统完成它的工作.

标签:c-3,rhel,linux,daemon

来源: https://codeday.me/bug/20190724/1525105.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值