Linux命令 - systemctl 配置service服务


1、service配置文件

每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。

Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。

systemctl enable命令用于在上面两个目录之间,建立符号链接关系。

开机时,Systemd只执行/etc/systemd/system目录里面的配置文件。

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

  1. [Unit]
  2. Description:描述,
  3. After:在network.target,auditd.service启动后才启动
  4. ConditionPathExists: 执行条件
  5. [Service]
  6. EnvironmentFile:变量所在文件
  7. ExecStart: 执行启动脚本
  8. Restart: fail时重启
  9. [Install]
  10. Alias:服务别名
  11. WangtedBy: 多用户模式下需要的

2、配置文件的区块

[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下。

  1. Description:简短描述
  2. Documentation:文档地址
  3. Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
  4. Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
  5. BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
  6. Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
  7. After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
  8. Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行
  9. Condition...:当前 Unit 运行必须满足的条件,否则不会运行
  10. Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败

[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。

  1. WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target + .wants后缀构成的子目录中
  2. RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target + .required后缀构成的子目录中
  3. Alias:当前 Unit 可用于启动的别名
  4. Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit

[Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。

  1. Type:定义启动时的进程行为。它有以下几种值。
  2. Type=simple:默认值,执行ExecStart指定的命令,启动主进程
  3. Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
  4. Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
  5. Type=dbus:当前服务通过D-Bus启动
  6. Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行
  7. Type=idle:若有其他任务执行完毕,当前服务才会运行
  8. ExecStart:启动当前服务的命令
  9. ExecStartPre:启动当前服务之前执行的命令
  10. ExecStartPost:启动当前服务之后执行的命令
  11. ExecReload:重启当前服务时执行的命令
  12. ExecStop:停止当前服务时执行的命令
  13. ExecStopPost:停止当其服务之后执行的命令
  14. RestartSec:自动重启当前服务间隔的秒数
  15. Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-successon-failureon-abnormalon-aborton-watchdog
  16. TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
  17. Environment:指定环境变量

3、修改配置文件后重启

  1. 修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务。
  2. # 重新加载配置文件
  3. $ sudo systemctl daemon-reload
  4. # 重启相关服务
  5. $ sudo systemctl restart foobar

4、服务管理(自启)

  1. systemctl start 服务名 开启服务
  2. systemctl stop 服务名 关闭服务
  3. systemctl status 服务名     显示状态
  4. systemctl restart 服务名     重启服务
  5. systemctl enable 服务名     开机启动服务
  6. systemctl disable 服务名     禁止开机启动
  7. systemctl list-units   查看系统中所有正在运行的服务
  8. systemctl list-unit-files     查看系统中所有服务的开机启动状态
  9. systemctl list-dependencies 服务名   查看系统中服务的依赖关系
  10. systemctl mask 服务名 冻结服务
  11. systemctl unmask 服务名 解冻服务
  12. systemctl set-default multi-user.target 开机时不启动图形界面
  13. systemctl set-default graphical.target 开机时启动图形界面
  1. # 修改服务配置文件后需要
  2. $ systemctl daemon-reload
  3. # 设置服务开机自启动
  4. $ systemctl enable postgresql.service
  5. # 查询是否自启动服务
  6. $ systemctl is-enabled postgresql.service
  7. # 取消服务器开机自启动
  8. systemctl disable postgresql.service
  9. # 显示某个 Unit 是否正在运行
  10. $ systemctl is-active application.service
  11. # 显示某个 Unit 是否处于启动失败状态
  12. $ systemctl is-failed application.service
  13. # 显示某个 Unit 服务是否建立了启动链接
  14. $ systemctl is-enabled application.service
  15. # 查看每个服务的启动耗时
  16. $ systemd-analyze blame
  17. # 查看当前运行的所有服务
  18. $ systemctl list-units
  1. # 查看服务是否开机启动列表
  2. $ systemctl list-unit-files

这个列表显示每个配置文件的状态,一共有四种。

  • enabled:已建立启动链接;表示允许开机启动
  • disabled:没建立启动链接;表示禁止开机启动
  • static:该配置文件没有[Install]部分(无法执行),只能作为其他配置文件的依赖
  • masked:该配置文件被禁止建立启动链接
  1. # 显示sshd服务的状态
  2. $ systemctl status sshd
  • Loaded行:配置文件的位置,是否设为开机启动
  • Active行:表示正在运行
  • Main PID行:主进程ID
  • Status行:由应用本身(这里是 httpd )提供的软件当前状态
  • CGroup块:应用的所有子进程
  • 日志块:应用的日志
  • Active行:
    • active(running) 表示程序正在执行;
    • atcive(exited) 执行一次就正常退出的服务,不在系统中执行任何程序;
    • active(waiting) 正在执行中,处于阻塞状态,需要等待其他程序执行完才能执行;
    • inactive (dead) 未启动状态;

转载于:https://www.cnblogs.com/ggzhangxiaochao/p/15039617.html

BLOG

搜索文章