linux以守护进程启动
㈠ linux守护进程管理神器-supervisor
supervisor是一款由Python开发的进程管理工具,其核心功能在于通过服务端supervisord管理子进程,提供启动、关闭、重启和查看进程状态的能力。
这款工具的独特之处在于能够通过Web界面直观地监控并控制进程状态,用户可以在Web页面上轻松地启动或停止服务。为了更直观地理解supervisor的作用,下图展示了如何通过它对服务器上的一些agent进行管理,以及对一些web服务进程进行监控,同时查看了简单的启动日志。
安装方面,由于supervisor是用Python编写的,因此使用pip工具安装最为便捷。对于CentOS系统,用户也可以选择通过yum来安装,但推荐使用pip以获取最新的版本和最佳兼容性。
对于希望确保服务在服务器异常宕机后能够快速恢复的用户,开启开机启动功能尤为重要。虽然通过pip或yum安装能够实现基础的安装流程,但为了实现开机启动,还需要进行额外的配置步骤。
配置过程包括服务端配置和子进程配置文件的创建与调整。服务端配置文件通常包含了一些默认设置,例如,web服务默认状态为关闭。用户可以根据实际需求,如内网服务的使用场景,决定是否开启web服务。子进程配置文件则在目录/etc/supervisord.d/*.ini中存放,这部分配置文件尤为关键,直接决定了子进程的行为和属性。
以node_exporter为例,其配置文件可以展示如何添加环境变量以及调整特定参数。用户还可以根据需要访问supervisord.org网站,查阅更多详细配置选项和最佳实践。
在实际使用中,掌握命令操作是高效管理进程的关键。用户可以通过执行`--help`命令了解特定命令的帮助文档,从而快速获取所需信息。对于日常操作而言,`supervisorctl`命令是执行进程控制操作的常用工具。
为了简化管理流程,用户可以将`supervisorctl`命令直接输入终端,进入交互式控制界面,从而直接执行各种管理命令,如启动、停止、重启进程,或查看进程状态等。
㈡ 如何以守护进程在linux系统下执行
编写守护进程程序的要点:
(1)让程序在后台执行。方法是调用fork()产生一个子进程,然后使父进程退出。
(2)调用setsid()创建一个新对话期。控制终端、登录会话和进程组通常是从父进程继承下来的,守护进程要摆脱它们,不受它们的影响,方法是调用setsid()使进程成为一个会话组长。setsid()调用成功后,进程成为新的会话组长和进程组长,并与原来的登录会话、进程组和控制终端脱离。
(3)禁止进程重新打开控制终端。经过以上步骤,进程已经成为一个无终端的会话组长,但是它可以重新申请打开一个终端。为了避免这种情况发生,可以通过使进程不再是会话组长来实现。再一次通过fork()创建新的子进程,使调用fork的进程退出。
(4)关闭不再需要的文件描述符。子进程从父进程继承打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。首先获得最高文件描述符值,然后用一个循环程序,关闭0到最高文件描述符值的所有文件描述符。
(5)将当前目录更改为根目录。
(6)子进程从父进程继承的文件创建屏蔽字可能会拒绝某些许可权。为防止这一点,使用unmask(0)将屏蔽字清零。
(7)处理SIGCHLD信号。对于服务器进程,在请求到来时往往生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie),从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将SIGCHLD信号的操作设为SIG_IGN。这样,子进程结束时不会产生僵尸进程。