Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


Systemd服务简介

2014-7-9 20:05    评论: 9 收藏: 8 分享: 10    

自己编写 .service 文件

systemd 的单元文件是受 XDG Desktop Entry .desktop 文件启发而产生,而最初起源是 Windows 下的 .ini 文件。

示例参见:Systemd/Services。

处理依赖关系

使用systemd时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,单元A要求单元B在A启动之前运行。在此情况下,向单元A配置文件中的 [Unit] 段添加 Requires=B 和 After=B 即可。若此依赖关系是可选的,可添加 Wants=B 和 After=B。请注意 Wants= 和 Requires= 并不意味着 After=,即如果 After= 选项没有制定,这两个单元将被并行启动。

依赖关系通常被用在服务(service)而不是目标(target)上。例如, network.target 一般会被某个配置网络接口的服务引入,所以,将自定义的单元排在该服务之后即可,因为 network.target 已经启动。

启动方式

编写自定义的 service 文件时,可以选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 参数进行设置。具体的参数说明请参阅 man systemd.service 。

  • 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认为服务就绪。

修改现存单元文件

要更改由软件包提供的单元文件,先创建名为 /etc/systemd/system/<单元名>.d/ 的目录(如 /etc/systemd/system/httpd.service.d/),然后放入 *.conf 文件,其中可以添加或重置参数。这里设置的参数优先级高于原来的单元文件。例如,如果想添加一个额外的依赖,创建这么一个文件即可:

/etc/systemd/system/<unit>.d/customdependency.conf
[Unit]
Requires=<新依赖>
After=<新依赖>

然后运行以下命令使更改生效:

# systemctl daemon-reload
# systemctl restart <单元>

此外,把旧的单元文件从 /usr/lib/systemd/system/ 复制到 /etc/systemd/system/,然后进行修改,也可以达到同样效果。在 /etc/systemd/system/ 目录中的单元文件的优先级总是高于 /usr/lib/systemd/system/ 目录中的同名单元文件。注意,当 /usr/lib/ 中的单元文件因软件包升级变更时,/etc/ 中自定义的单元文件不会同步更新。此外,你还得执行 systemctl reenable <unit>,手动重新启用该单元。因此,建议使用前面一种利用 *.conf 的方法。

小贴士: 可以用 systemd-delta 命令来查看哪些单元文件被覆盖、哪些被修改。

单元配置文件的 vim 语法高亮支持

可从 官方仓库 安装 vim-systemd 软件包,使 unit 配置文件在 Vim 下支持语法高亮。

查看其它分页:

发表评论


最新评论

我也要发表评论

netb2c 2014-7-13 00:03 2 回复
赶紧掌握,这就是技术前沿.
大圣万万岁 2014-7-10 09:27  新浪微博网友评论 回复
//@Linux中国:RHEL/CentOS 7已经来了,还不懂systemd的系统管理员要赶快学习啦。
大狗驴 2014-7-10 09:03  新浪微博网友评论 回复
//@Linux中国:RHEL/CentOS 7已经来了,还不懂systemd的系统管理员要赶快学习啦。
无名的城堡 2014-7-10 09:03  新浪微博网友评论 回复
XuYuanzhen 2014-7-10 09:03  新浪微博网友评论 回复
//@Linux中国:RHEL/CentOS 7已经来了,还不懂systemd的系统管理员要赶快学习啦。
Linux中国 2014-7-10 09:03  新浪微博网友评论 回复
RHEL/CentOS 7已经来了,还不懂systemd的系统管理员要赶快学习啦。
Rbmac 2014-7-9 21:03  新浪微博网友评论 回复
赞啊。。//@机智的阿卡林酱: 大坑
标叔叔叔叔叔叔叔叔 2014-7-9 21:03  新浪微博网友评论 回复
转发微博。
机智的阿卡林酱 2014-7-9 20:13  新浪微博网友评论 回复
大坑

热点评论

netb2c 2014-7-13 00:03
赶紧掌握,这就是技术前沿.
2
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。