RHEL6和之前的版本使用的初始进程是init,init是一个线性的启动过程,一个接一个的启动,比较慢;systemd则可以多进程启动,速度提高很多。
sevice:服务后台进程
target:此类配置单元为其他配置单元进行逻辑分组。3级多用户模式->multi-user.target,5级图形化模式->graphical.target
自定义服务
每个服务可以在/usr/lib/systemd/system下添加一个以.service结尾的文件
vim /usr/lib/systemd/system/zabbix_agentd.service # 添加以服务为名的service文件 [Unit] Desciption=zabbix_agentd - zabbix monitor client After=network.target # 在network启动后再启动 #Before=xxx # After Before不存在依赖关系,只是启动顺序 [Service] User=zabbix Group=zabbix Type=forking # 此服务以forking模式运行 PIDFile=/tmp/zabbix_agentd.pid # PID文件存放位置 ExecStartPre=/usr/bin/rm -f /tmp/zabbix_agentd.pid # 启动前删除PID文件 ExecStart=/usr/local/zabbix_agent-3.4.15/sbin/zabbix_agentd # 启动命令 ExecReload=/bin/kill -s HUP $MAINPID # 重载执行命令 KillSignal=SIGQUIT TimeoutStopSec=5 # 停止超时时间,如果不能在指定时间内停止,将通过SIGKILL强制终止 KillMode=mixed # systemd停止服务的方式 Restart=on-failure # 服务不正常退出后重启 #PrivateTmp=true # 表示给服务分配独立的临时空间 [Install] WantedBy=multi-user.target # 多用户模式
配置字段Type:
simple(默认):# 以ExecStart字段启动的进程为主进程
forking: # ExecStart字段以fork()方式启动,启动完成父进程将退出,子进程作为主服务进程持续运行,可以设置PIDFile,以便systemd可靠地识别主服务进程。
oneshot: # 类似于simple,但只执行一次,systemd会等它执行完,才启动其他服务
dbus: # 类似于simple, 但会等待D-Bus信号后启动
notify: # 类似于simple, 启动结束后会发出通知信号,然后systemd再启动其他服务
idle: # 类似于simple,但是要等到其他任务都执行完,才会启动该服务。
KillMode:
control-group:当前控制组里的所有子进程,都会被杀掉,默认
process:只有主进程被终止
mixed:SIGTERM信号被发送给主进程,SIGKILL信号被发送给子进程
none:没有进程会被杀掉,只是执行服务的stop命令
Restart:
no:服务不会重启,默认
on-success:服务正常退出时重启
on-failure:服务非正常退出时重启
on-watchdog:超时退出时重启
always:无论正常或非正常退出都将重启
ExecStart:启动服务执行的命令及参数
ExecStartPre:启动服务前执行的其他命令
ExecStartPost:服务启动后执行的其他命令
ExecStop:停止服务执行的命令及参数
ExecStopPre:停止服务前执行的其他命令
ExecStopPost:服务停止后执行的其他命令