文章目录
确定当前系统使用的哪种命令用来启动服务
SysV init 或者 systemd
使用下面的命令:
ps -p 1
例如,输出:
PID TTY TIME CMD
1 ? 00:00:02 systemd
SysV init
service命令用于对系统服务进行管理,比如启动(start)、停止(stop)、重启(restart)、查看状态(status)等。
相关的命令还包括chkconfig、ntsysv等,chkconfig用于查看、设置服务的运行级别,ntsysv用于直观方便的设置各个服务是否自动启动。
重点:
service命令本身是一个shell脚本,它在/etc/init.d/
目录查找指定的服务脚本,然后调用该服务脚本来完成任务。
service的内幕:
service运行指定服务(称之为System V init
脚本)时,把大部分环境变量去掉了,只保留LANG和TERM两个环境变量,并且把当前路径置为/,也就是说是在一个可以预测的非常干净的环境中运行服务脚本。这种脚本保存在/etc/init.d目录中,它至少要支持start和stop命令。
service命令其实是去/etc/init.d
目录下,去执行相关程序,如下所示:
# service命令启动redis脚本
service redis start
# 直接启动redis脚本
/etc/init.d/redis start
# 开机自启动
update-rc.d redis defaults
其中脚本需要我们自己编写。
这种方式有两个缺点:
- 启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
- 启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长
systemd
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
根据 Linux 惯例,字母d
是守护进程(daemon)的缩写。
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
systemd对应的进程管理命令是systemctl
查看 Systemd 的版本
systemctl --version
管理系统
systemctl是 Systemd 的主命令,用于管理系统。
# 重启系统
$ sudo systemctl reboot
# 关闭系统,切断电源
$ sudo systemctl poweroff
# CPU停止工作
$ sudo systemctl halt
# 暂停系统
$ sudo systemctl suspend
# 让系统进入冬眠状态
$ sudo systemctl hibernate
# 让系统进入交互式休眠状态
$ sudo systemctl hybrid-sleep
# 启动进入救援状态(单用户状态)
$ sudo systemctl rescue
systemctl命令兼容了service
即systemctl也会去/etc/init.d目录下,查看,执行相关程序
systemctl redis start
systemctl redis stop
# 开机自启动
systemctl enable redis
systemctl命令管理systemd的资源Unit
systemd的Unit放在目录/usr/lib/systemd/system
(Centos)或/etc/systemd/system
(Ubuntu)
主要有四种类型文件.mount, .service, .target, .wants
管理服务(unit)
systemctl 提供了一组子命令来管理单个的 unit,其命令格式为:
systemctl [command] [unit]
command 主要有:
start:立刻启动后面接的 unit。
stop:立刻关闭后面接的 unit。
restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。
reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。
enable:设置下次开机时,后面接的 unit 会被启动。
disable:设置下次开机时,后面接的 unit 不会被启动。
status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。
is-active:目前有没有正在运行中。
is-enable:开机时有没有默认要启用这个 unit。
kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。
show:列出 unit 的配置。
mask:注销 unit,注销后你就无法启动这个 unit 了。
unmask:取消对 unit 的注销。
通过 etcd.service 来观察服务类型 unit 的基本信息:
systemctl status etcd.service
输出:
输出内容:
第一行是对 unit 的基本描述。
第二行中的 Loaded 描述操作系统启动时会不会启动这个服务,enabled 表示开机时启动,disabled 表示开机时不启动。而启动该服务的配置文件路径为:/lib/systemd/system/etcd.service。
第三行 中的 Active 描述服务当前的状态,active (running) 表示服务正在运行中。如果是 inactive (dead) 则表示服务当前没有运行。后面则是服务的启动时间。
第四行的 Docs 提供了在线文档的地址。
下面的 Main PID 表示进程的 ID,接下来是任务的数量,占用的内存和 CPU 资源。
再下面的 Cgroup 描述的是 cgrpup 相关的信息,笔者会在后续的文章中详细的介绍。
最后是输出的日志信息。
.mount文件
.mount文件定义了一个挂载点,[Mount]节点里配置了What,Where,Type三个数据项
等同于以下命令:
mount -t hugetlbfs /dev/hugepages hugetlbfs
.service文件
.service文件定义了一个服务,分为[Unit],[Service],[Install]三个小节
[Unit]
Description:描述,
After:在network.target,auditd.service启动后才启动
ConditionPathExists: 执行条件
[Service]
EnvironmentFile:变量所在文件
ExecStart: 执行启动脚本
Restart: fail时重启
[Install]
Alias:服务别名
WangtedBy: 多用户模式下需要的
.target文件
.target定义了一些基础的组件,供.service文件调用
.wants文件
.wants文件定义了要执行的文件集合,每次执行,.wants文件夹里面的文件都会执行。
运行级别概念的区分
System V init 运行级别 | systemd 目标名称 | 作用 |
---|---|---|
0 | runlevel0.target, poweroff.target | 关机 |
1 | runlevel1.target, rescue.target | 单用户模式 |
2 | runlevel2.target, multi-user.target | 等同于级别 3 |
3 | runlevel3.target, multi-user.target | 多用户的文本界面 |
4 | runlevel4.target, multi-user.target | 等同于级别 3 |
5 | runlevel5.target, graphical.target | 多用户的图形界面 |
6 | runlevel6.target, reboot.target | 重启 |
emergency | emergency.target | 紧急 Shell |
管理服务的启动、重启、停止、重载、查看状态等常用命令区分
System V init 命令(RHEL 6) | systemctl 命令(RHEL 7) | 作用 |
---|---|---|
service foo start | systemctl start foo.service | 启动服务 |
service foo restart | systemctl restart foo.service | 重启服务 |
service foo stop | systemctl stop foo.service | 停止服务 |
service foo reload | systemctl reload foo.service | 重新加载配置文件(不终止服务) |
service foo status | systemctl status foo.service | 查看服务状态 |
设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
RHEL Linux
chkconfig 是Redhat下的程序。
使用 chkconfig 把服务加到开机自动启动列表里,开机就能自启动了;
System V init 命令(RHEL 6) | systemctl 命令(RHEL 7) | 作用 |
---|---|---|
chkconfig foo on | systemctl enable foo.service | 开机自动启动 |
chkconfig foo off | systemctl disable foo.service | 开机不自动启动 |
chkconfig foo | systemctl is-enabled foo.service | 查看特定服务是否为开机自动启动 |
chkconfig –list | systemctl list-unit-files –type=service | 查看各个级别下服务的启动与禁用情况 |
ubuntu Linux
在Ubuntu下有一个更好的程序可以完美“替代”chkconfig,那就是sysv-rc-conf。
如果服务器上没有这个工具,先安装 sysv-rc-conf 工具,然后进行设置:
sudo apt-get install sysv-rc-conf
安装好,打开运行:
sudo sysv-rc-conf
即进入服务管理界面。
然后将对应服务的2,3,4,5级别全部选中,q键退出,即完成开机启动设置。
参考
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155701.html