Systemd是linux下的一款系统服务管理器。Systemd的特征有:支持并行化任务;同时采用socket式与D-Bus总线式激活服务;按需启动守护进程(daemon);利用Linux的cgroups监视进程;支持快照和系统恢复;维护挂载点和自动挂载点;各服务间基于依赖关系进行精密控制。
其中的监视和控制功能的主要命令就是systemctl。
Systemd有很多不同类型的使用单元,主要包括:系统服务(.service)、挂载点(.mount)、sockets(.sockets)、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)。当然一般我们常用的就是其中的系统服务。
单元文件目录按优先级从高到低分别为:
/etc/system/system/
/usr/lib/systemd/system/
对于系统服务而言,比较重要的就是其中的.service文件。
例如:testencd.service
[Unit]
Description=java test
[Service]
Type=forking
ExecStart=/opt/java/bin/java -jar /home/apps/test1-encrypt-master-SNAPSHOT-exec.jar > /home/apps/testenc.log &
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
.service文件由三个部分组成:Unit\Service\Install
[Unit]主要是为了解决依赖关系。常见的添加Requires、After,如果这个依赖是可选的,那么是Wants、After。依赖关系通常被用在服务(service)而不是(target)上,所以上述的httpd所依赖的仅仅是一些target,因而也就没有Requires和Wants出现。
[service]可选择几种不同的服务启动方式,启动方式通过Type参数进行设置。
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认为服务就绪。
新增服务:在单元文件目录创建.service文件,需systemctl daemon-reload重新加载,然后可以使用systemctl start testenc,有守护进程功能,异常退出后会自动唤起。可直接使用stop,restart等
修改服务:在单元文件目录修改.service文件,需systemctl daemon-reload重新加载
可以使用journalctl来进行systemd相关启动日志的查看。
journalctl -b -0 # 显示本次启动的信息
journalctl -b -1 # 显示上次启动的信息