背景

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模式