将linxc-keepalived的active(runing)->active(exited)、docker的active(runing)->active(exited)

本文详细解析了systemd服务配置文件中的各项参数,如ExecStart、ExecStop等,以及服务的不同运行状态,如active(running)、active(exited)。通过实例展示了如何将服务设置为启动后立即退出并保持active(exited)状态,涉及到的关键配置包括Type、RemainAfterExit和Restart。此外,还探讨了服务状态转变的条件和方法,强调了正确配置服务参数以达到预期效果的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初始状态
--------此处以linxc-keepalived举例,“vim /lib/systemd/system/linxc-keepalived.service”打开对应配置文件(大多数服务对应的配置文件参数都是此处),“service linxc-keepalived status”查看状态

初始配置文件:在这里插入图片描述
初始服务状态:在这里插入图片描述

参数与状态理解
--------1.要想复现exited状态首先应该明白各个配置参数的含义: ExecStart:启动当前服务的命令、ExecStartPre:启动当前服务之前执行的命令、ExecStartPost:启动当前服务之后执行的命令、ExecReload:重启当前服务时执行的命令、ExecStop:停止当前服务时执行的命令、ExecStopPost:停止当其服务之后执行的命令、RestartSec:自动重启当前服务间隔的秒数、RemainAfterExit=yes systemd将该服务保持为活动状态、Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog、no、TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数、Environment:指定环境变量
--------2.active(runing、exited、waiting、dead)几种状态的实际意义:active(running) ##正有一个或多个程序正在系统中执行, vsftpd就是这种模式、atcive(exited) ##仅执行一次就正常结束的服务, 目前并沒有任何程序在系統中执行、atcive(waiting)##正在执行当中,不过还在等待其他的事件才能继续处理、atcive(dead)##程序退出;在操作系统中,有某些服务只需要初始化一下就可以了,不需要在服务器中启动一个守护进程。这种服务初始化完成后就直接推出,其服务的状态就是active(exited)
--------3.Type的属性:simple :(默认值)systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 激活型、forking :systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定PIDFile=,以便 systemd 能够跟踪服务的主进程、oneshot :这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态、notify :与Type=simple相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由libsystemd-daemon.so提供、dbus :若以此方式启动,当指定的BusName出现在DBus系统总线上时,systemd认为服务就绪、idle :systemd会等待所有任务处理完成后,才开始执行idle类型的单元。其他行为与Type=simple类似

解决方法
--------在配置文件“vim /lib/systemd/system/docker.service ”中修改“Type=simple”使其以默认的普通方式启动再加上“RemainAfterExit=yes”systemd将该服务保持为活动状态,“Restart=no”使其结束后不必重启,再设置“ExecStartPost=/bin/kill -HUP $MAINPID”服务启动过后执行这条命令,使其可以启动过后就将这个服务kill掉,保存退出再使用“systemctl daemon-reload”重新加载配置文件,“systemctl restart 对应服务名字”就可以实现active(runing)->active(exited);但是实际active(runing)->active(exited)问题也不止一种,后期需要多种验证方式合并进行[端口占用kill掉(待定)]

总结
--------通过对参数以及状态的理解可以推出:要想得到active(runing)->active(exited)的转变,只需要某些服务启动一下就可以了,然后马上将其kill掉,但是如果直接kill掉的话就是active(dead),所以要使用到配置参数中的RemainAfterExit=yes—systemd将该服务保持为活动状态,加上过后就会实现active(runing)->active(exited)的转变
--------所以配置参数修改过后保存退出“systemctl daemon-reload”重新加载配置参数,“service linxc-keepalived restart”重启服务,再使用“service linxc-keepalived status”查看对应服务状态

修改后的配置文件:在这里插入图片描述
修改后的服务状态:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值