初始状态:
--------此处以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”查看对应服务状态
修改后的配置文件:
修改后的服务状态: