什么是服务
linux系统中有些程序在启动之后持续在后台运行,等待用户或其他应用程序调用,此类程序就是服务(service)
大多数服务都是通过守护进程(daemon)实现的。守护进程一旦开启,就在后台运行并时刻监视着系统前台。
运行级别
运行级别是操作系统当前正在运行的功能级别,用来设置不同环境下所运行的程序和服务。
sysVinit
使用运行级别和对应的链接文件启动和关闭系统服务。
默认的 RunLevel(在 /etc/inittab
文件设置)现在被默认的 Target 取代,位置是 /etc/systemd/system/default.target
,通常符号链接到 graphical.target
(图形界面)或者 multi-user.target
(多用户命令行)。
看一下 sysVinit
和 systemd
的对比:
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-6
和 emergency
八个运行级别, 使用 runlevel
命令可以查看当前系统的运行级别:
[test@ubuntu: ~]$ runlevel
在 Ubuntu 中, 2-5并没有任何区别
ubuntu 没有 /etc/inittab
, 但是可以在 /etc/default/grub
修改运行级别
服务管理
service命令
service
命令可以管理服务
通过 man service
查看解释为:service
运行一个位于 /etc/init.d/
目录下的脚本SCRIPT,或者是位于 /etc/systemd
的 service
单元(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 系统中
/lib
是usr/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
之后浏览器中再次访问, 进入的目录就改变了
评论(0)