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:服務停止后執行的其他命令
