背景
centos7后继承了redhat7 systemd启动管理服务,systemc替换了原理service服务提供了更加优秀的服务管理功能,也大幅提高了系统服务的运行效率。
- systemd的目标是:尽可能启动更少进程;尽可能将更多进程并行启动。
- systemd尽可能减少对shell脚本的依赖。
CentOS 7 的服务 systemctl 脚本存放在:/usr/lib/systemd/,有系统 system 和用户 user 之分, 即:
/usr/lib/systemd/system
/usr/lib/systemd/user
配置文件
先要说明一下 unit 的文件位置,一般主要有三个目录:
/lib/systemd/system
/run/systemd/system
/etc/systemd/system
这三个目录的配置文件优先级依次从低到高,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。 系统安装时,默认会将 unit 文件放在 /lib/systemd/system 目录。
服务配置(启动maxwell服务)
在/etc/systemd/system创建maxwell.service文件
# Maxwell systemd service file
[Unit]
Description=Maxwell Sync binlog
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
User=maxwell
Group=maxwell
Type=forking
Environment="JAVA_HOME=/usr/local/jdk"
#ExecStartPre=/usr/bin/cd /maxwell
WorkingDirectory=/data/server/maxwell
ExecStart=/maxwell/bin/maxwell --daemon --config config.properties
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
配置项说明
- 下面分别解释下着三部分的含义
[Unit]
- Description : 服务的简单描述
- Documentation : 服务文档
- After= : 依赖,仅当依赖的服务启动之后再启动自定义的服务单元
[Service]
- Type : 启动类型 simple、forking、oneshot、notify、dbus
- - Type=simple(默认值):systemd 认为该服务将立即启动,服务进程不会 fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是 socket 激活型
- - Type=forking:systemd 认为当该服务进程 fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求, 使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。
- - Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
- - Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号,这一通知的实现由 libsystemd-daemon.so 提供
- - Type=dbus:若以此方式启动,当指定的 BusName 出现在 DBus 系统总线上时,systemd 认为服务就绪。
- PIDFile : pid 文件路径
- Environment : 环境变量(可以添加多个)eg :Environment=REPO_REF=dev
- ExecStartPre :启动前要做什么,上文中是测试配置文件 -t
- ExecStart:启动
- ExecReload:重载
- ExecStop:停止
- PrivateTmp:True 表示给服务分配独立的临时空间
[Install]
- WantedBy:服务安装的用户模式,从字面上看,就是想要使用这个服务的有是谁?上文中使用的是:multi-user.target ,就是指想要使用这个服务的目录是多用户。
启动管理操作
当执行(设置开机自启动)
systemctl enable maxwell.service
就会在 /etc/systemd/system/multi-user.target.wants/ 目录下新建一个 /usr/lib/systemd/system/maxwell.service 文件的链接。
systemctl start maxwell.service 启动
systemctl stopmaxwell.service 停止
systemctl restart maxwell.service 重启
systemctl status maxwell.service 状态
总结
systemd提供了非常友好的服务管理方式,管理人员不用在编写复杂的启动脚本了。不用担心重复启动,甚至可以做到守护启动,失败重启等高级功能。
补充:
systemd用target替代了runlevel的概念
systemd不使用/etc/inittab,如何查看系统默认的运行级别
systemctl get-default
multi-user.target
改变当前target,重启无效
格式:systemctl set-default TARGET.target
例子:systemctl set-default graphical.target
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
运行级别如下:
runlevel0.target -> poweroff.target
runlevel1.target -> rescue.target
runlevel2.target -> multi-user.target
runlevel3.target -> multi-user.target
runlevel4.target -> multi-user.target
runlevel5.target -> graphical.target
runlevel6.target -> reboot.target
常用指令:
systemctl list-units 查看所有单元(加载到内存中)
systemctl list-unit-files 列出系统已经安装的所有unit,包括那些没有被加载到内存中的unit
systemctl is-enabled servername 查看servername是否开机自启动
systemctl cat maxwell.service 查看启动文件
systemctl poweroff # 关机
systemctl reboot # 重启
systemctl rescue # 进入rescue模式