什么是服务

linux系统中有些程序在启动之后持续在后台运行,等待用户或其他应用程序调用,此类程序就是服务(service)

大多数服务都是通过守护进程(daemon)实现的。守护进程一旦开启,就在后台运行并时刻监视着系统前台。

运行级别

运行级别是操作系统当前正在运行的功能级别,用来设置不同环境下所运行的程序和服务。

sysVinit 使用运行级别和对应的链接文件启动和关闭系统服务。

默认的 RunLevel(在 /etc/inittab 文件设置)现在被默认的 Target 取代,位置是 /etc/systemd/system/default.target ,通常符号链接到 graphical.target(图形界面)或者 multi-user.target(多用户命令行)。

看一下 sysVinitsystemd 的对比:

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

运行级别有 0-6emergency 八个运行级别, 使用 runlevel 命令可以查看当前系统的运行级别:

[test@ubuntu: ~]$ runlevel

在 Ubuntu 中, 2-5并没有任何区别

ubuntu 没有 /etc/inittab, 但是可以在 /etc/default/grub 修改运行级别

服务管理

service命令

service 命令可以管理服务
通过 man service 查看解释为:service 运行一个位于 /etc/init.d/ 目录下的脚本SCRIPT,或者是位于 /etc/systemdservice 单元(unit)

下面看看/etc/init.d/ 目录下有哪些脚本:

可以看到, 我们用于远程登录的 ssh 服务也在这个里面,

绿色的说明这些都是可执行文件, 所以我们也可以直接执行这些可执行文件来管理我们的服务, 比如重启 ssh 服务:

[test@ubuntu: ~]$ sudo /etc/init.d/ssh restart

常用的命令有:

  • status 查看服务状态
  • stop 停止服务
  • start 启动服务
  • restart 重启服务

也可以通过 service 命令, 可以管理这些服务

比如, 查看服务的状态:

[test@ubuntu: ~]$ service ssh status

停止服务:

[test@ubuntu: ~]$ sudo service ssh stop

启动服务:

[test@ubuntu: ~]$ sudo service ssh start

重启服务:

[test@ubuntu: ~]$ sudo service ssh restart

查看所有服务:

[test@ubuntu: ~]$ service --status-all

+ 号表示服务已启动, - 号表示服务未启动

Systemd

Systemd 是一系列工具的集合,其作用也远远不仅是启动操作系统,它还接管了后台服务、结束、状态查询,以及日志归档、设备管理、电源管理、定时任务等许多职责,并支持通过特定事件(如插入特定 USB 设备)和特定端口数据触发的 On-demand(按需)任务。

Systemd 可以管理所有系统资源,不同的资源统称为 Unit(单元)。

单元的目录位于 /etc/systemd/system, 其中主要的文件类型有四种:

.mount

.mount文件定义了一个挂载点,[Mount] 节点里配置了 What, Where, Type三个数据项

.service

.service 文件定义了一个服务,分为[Unit][Service][Install]三个小节

  • [Unit] Unit单元描述, 执行条件等
  • [Service] 变量所在文件, 执行启动脚本等
  • [Install] 服务别名等

.target

.target 定义了一些基础的组件,供.service文件调用

.wants

.wants文件定义了要执行的文件集合,每次执行,.wants文件夹里面的文件都会执行

Unit 文件按照 Systemd 约定,应该被放置指定的三个系统目录之一中。这三个目录是有优先级的,如下所示,越靠上的优先级越高。因此,在三个目录中有同名文件的时候,只有优先级最高的目录里的那个文件会被使用:

  • /etc/systemd/system:系统或用户自定义的配置文件
  • /run/systemd/system:软件运行时生成的配置文件
  • /usr/lib/systemd/system:系统或第三方软件安装时添加的配置文件。

Ubuntu 系统中 /libusr/lib 的软连接,所以等同于 /usr/lib/systemd/system

查看一下 /usr/lib/systemd/system 里面都有什么:

[test@ubuntu: ~]$ ls /usr/lib/systemd/system

可以看到,我们安装的第三方服务, 都在这个目录里面, 包括我们之前使用的 ssh

systemctl 命令管理 systemd 的资源 Unit, 它兼容了 service 命令, 所以我们也可以使用这个命令来管理我们的服务:

查看所有服务状态:

[test@ubuntu: ~]$ sudo systemctl list-units --type=service

启动服务:

[test@ubuntu: ~]$ sudo systemctl start ssh.service

停止服务:

[test@ubuntu: ~]$ sudo systemctl stop ssh.service

重启服务:

[test@ubuntu: ~]$ sudo systemctl restart ssh.service

重新加载服务配置文件:

[test@ubuntu: ~]$ sudo systemctl reload ssh.service 

查询服务运行状态:

[test@ubuntu: ~]$ sudo systemctl status ssh.service

开启自启动

查询服务是否开机启动:

[test@ubuntu: ~]$ sudo systemctl is-enabled ssh.service 

开机运行服务:

[test@ubuntu: ~]$ sudo systemctl enable ssh.service

取消开机运行:

[test@ubuntu: ~]$ sudo systemctl disable ssh.service

自定义一个服务

我们尝试来自定义一个服务, 编写服务脚本文件:

[test@ubuntu: ~]$ sudo vim /etc/init.d/hello

写入内容:

#!/bin/bash
echo "hello"

添加到启动脚本中去:

[test@ubuntu: ~]$ sudo update-rc.d -f hello defaults

-f 强制, 即使

执行服务:

[test@ubuntu: ~]$ sudo service hello

移除服务:

[test@ubuntu: ~]$ sudo update-rc.d hello remove

删除服务脚本:

[test@ubuntu: ~]$ sudo rm /etc/init.d/hello

安装文件 ftp 服务

vsftpd 服务器(very secure FTP daemon)是ftp服务器的一种,安全性比其他的FTP服务器要高一些

安装 vsftpd 服务器:

[test@ubuntu: ~]$ sudo apt-get install vsftpd

查看 /etc/init.d, 可以看到多了一个 vsftpd 服务:

[test@ubuntu: ~]$ ls /etc/init.d/

浏览器输入服务器的地址 ftp:192.168.10.12 (你自己服务的ip), 用服务器的用户名和密码, 登录之后就可以使用 ftp 服务了:

当然这样直接使用, 不是很安全, 我们可以创建不同的用户, 并且对文件服务器的目录进行设置:

编辑 vsftpd.conf 配置文件:

[test@ubuntu: ~]$ sudo vim /etc/vsftpd.conf

在最后一行添加:

local_root=/home/test/study

这个目录写你服务器上存在的目录

重启 vsftpd 服务:

[test@ubuntu: ~]$ sudo service vsftpd restart

之后浏览器中再次访问, 进入的目录就改变了

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。