文档章节

ubuntu 16.04 service 基础要点

曾建凯
 曾建凯
发布于 2016/12/09 02:12
字数 854
阅读 1368
收藏 6

搞了两天,对16.04的service基本上有一个比较清晰的掌握了。16.04转用了systemd来对系统服务提供管理和控制(貌似15.04就已经转用了)。

添加一个服务(service)

添加一个服务,需要创建一个服务的定义文件放在 /lib/systemd/system 目录下,这里以 nginx.service 为例:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建了这个文件后,还无法直接使用。

service nginx start
systemctl start nginx
systemctl start nginx.service 

执行上述的命令后,会提示以下的错误:

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

这时候你需要重载systemd的配置列表:

systemctl daemon-reload

你可以执行以下命令,来确认你的服务是否已经加入到配置列表:

# 这个是列举所有已经存在配置文件对应的服务状态列表
systemctl list-unit-files | grep nginx
# 列举出具有加载状态的服务列表(或者理解为最近被使用的服务)
systemctl --all | grep nginx

服务操作

如果习惯了使用 service 指令,可以继续使用:

service nginx start
service nginx stop
service nginx reload
service nginx restart
service nginx status

和过去不同,现在不再需要在 /etc/init.d 目录下添加一个服务脚本了。

但实际上Ubuntu的Wiki上推荐改用:

systemctl start nginx
systemctl start nginx.service
systemctl stop nginx
systemctl reload nginx
systemctl restart nginx
systemctl status nginx

不过 systemctl (包括 service )执行以后,是没有任何特别提示,除非碰到了错误信息,否则都是静默的,也许这是为了配合 bash 脚本的设计需求。

激活/禁用系统自启动服务

再次,要将一个服务激活为系统启动时的自启动服务,现在只要执行以下命令:

systemctl enable nginx.service
systemctl enable nginx

这样就正式激活了服务系统启动时的自启动。要禁用自启动,只要disable即可。

systemctl disable nginx.service
systemctl disable nginx

你可以执行以下的命令,来检查服务是否已经激活了自启动

systemctl is-enabled nginx
# enabled/disabled

检查一个服务是否启动:

systemctl is-active nginx
# active/inactive

关于 /etc/init 目录

这个目录,其实未必真的需要添加进一个相关的控制进程启动的配置文件,这里添加的文件,和具体的服务启动没有具体的关联性,新版本的 service 配置文件,实际上已经明确了启动服务所需的必要服务和之后加载的服务。

/etc/init 目录下存放的,可以理解为一个综合性启动的脚本配置,他支持在配置文件中,使用bash代码块,比如:

# nginx

description "nginx http daemon"
author "George Shammas <georgyo@gmail.com>"

start on (filesystem and net-device-up IFACE!=lo)
stop on runlevel [!2345]

env DAEMON=/usr/sbin/nginx
env PID=/var/run/nginx.pid

expect fork
respawn
respawn limit 10 5
#oom never

pre-start script
        $DAEMON -t
        if [ $? -ne 0 ]
                then exit $?
        fi
end script

exec $DAEMON

可以理解为,对过去的启动脚本更简化版的一个启动配置文件,使用这个配置文件控制启动,还是使用 systemd 自行控制服务作为自启动,这个交给使用者去权衡吧。

这篇文章算是对这两天的知识点的一个总结吧。

© 著作权归作者所有

共有 人打赏支持
曾建凯
粉丝 324
博文 57
码字总数 90297
作品 0
广州
技术主管
加载中

评论(2)

zhangqunshi
zhangqunshi
如果init.d和service两个都设置了,那么会怎么样?
SunBeau
SunBeau
请问Failed to start test.service: Unit test.service not found.
是什么原因?test.service文件添加了
Docker 的配置文件说明

摘要: 由于 Linux 不同发行版所采用的默认管理框架的不同,Docker 在不同环境下所使用的默认配置文件也有所不同。这给初学者带来了极大的困惑和不便。好消息是,Docker 官方也意识到了这个问...

姬子玉
2017/11/27
0
0
docekr8使用Docker镜像的方法讲解

在之前的介绍中,我们知道镜像是 Docker 的三大组件之一。 Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。 本章将介绍更多关于镜像的内容...

王冠hurt的博客
2017/12/20
0
1
Ubuntu 16下安装zabbix agent

Ubuntu 16下安装zabbix agent , 分为三步 第一步:安装repository For Ubuntu Supported versions Ubuntu 16.04 LTS (codeame: xenial) Ubuntu 14.04 LTS (codename: trusty) Installing re......

careluck
2017/10/27
0
0
在Ubuntu 16.04上用sytemd启动OpenVPN Client的正确方式

Ubuntu 16.04默认使用systemd管理服务的启动、停止、重新启动和状态查看等。由于之前用习惯了sysv的服务管理方式,用sytemd还很不习惯,有很多不甚了了地方。今天中午准备在Ubuntu 16.04上部...

urey_pp
2017/06/15
0
0
Ubuntu 16.04 LTS 明日将发布,Canonical 公布系统新特性

Canonical今天宣布将在4月21日发布第六版Ubuntu LTS长期支持版本,并且还特别公布了有关新版系统的一些新特性。这次的系统代号叫好客的干毛地松鼠(Xenial Xerus),版本号Ubuntu 16.04 LTS,...

oschina
2016/04/21
5.7K
50

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
31分钟前
1
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
37分钟前
1
0
大数据学习脑图以及入门教程!

近些年,大数据的火热可谓是技术人都知道啊,很多人呢,也想学习大数据相关,所以,这里分享几个大数据脑图,希望可以让你清楚明白从哪里入门大数据,知道该学习以及掌握哪些知识点; 大数据...

董黎明
今天
1
0
聊聊redis的监控工具

序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行 docker r...

go4it
今天
2
0
TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部