cimon-io.systemd-service

Ansible systemd 服务角色

一个创建和配置 systemd 服务单元 文件的 ansible 角色。它允许您在后台自动运行某些服务,并为特定事件启用或禁用它们,管理进程组并配置对其他单元的依赖。

该角色包括以下任务:

  1. /etc/systemd/system/ 下为每个 systemd_service 项创建名为 service_name.service 的 systemd 服务文件。
  2. 配置重要的单元、服务和安装部分选项。
  3. 通知 systemd 新服务文件已存在,重启服务。
  4. 如果必要,使服务在启动时自动运行。

需求

此角色需要根访问权限,因此可以在播放本中使用全局的 become: yes 参数运行,或像下面这样在播放本中调用该角色:

- hosts: apps
  roles:
    - role: systemd_service
      become: yes

角色变量

所有必要的服务可以通过 systemd_service 字典变量指定(见 defaults/main.yml):

systemd_service: {}

对于每个服务,您需要设置 service_name 和必要的参数值。例如,指定服务是否应在启动时运行,可以使用参数 enabled

systemd_service:
  service:
    service_name:
    enabled:

所有已为特定 service_name 键(作为嵌套参数)提供的可用参数如下所示。

单元部分选项

这一组参数包括有关单元的一般信息。

description:   # 描述单元的自由文本字符串

接下来的两个参数配置对其他单元的依赖关系。如果服务被激活,列出的单元也将被激活。如果其中一个 requires 单元无法运行或突然失败,服务也会停止。对于 wants 列表,如果其中某个单元被停用,服务不会停止。参数可以由多个以空格分隔的单元名称组成。它们也可以被指定多次。

requires:   # 必须与服务一起启动的单元
wants:      # 应与服务一起启动的单元

要配置服务启动或停止的顺序,可以使用以下参数。请注意,如果单元之间没有顺序依赖关系,它们将同时关闭或启动。两个参数由以空格分隔的单元列表设置。

after:   # 服务后必须启动的单元
before:  # 服务前必须启动的单元

服务部分选项

该部分包含有关服务及其监督的进程的信息。type 参数配置此服务单元的进程启动类型。

type:

可以取以下值:

  • simple - 该类型假定服务将立即启动。进程不得分叉。如果其他服务对该服务启动有顺序依赖,切勿使用此类型。如果该服务向系统中的其他进程提供功能,则其通信通道应在守护进程启动之前安装。
  • forking - 假定服务仅启动一次,进程在父进程完成后分叉。此类型用于启动经典守护进程。如果使用此模式,建议也使用 pid_file 参数(见下文),以便 systemd 可以识别守护进程的主进程。

其他值的行为与简单值类似。然而,它们有一些区别:

  • oneshot - 服务预计在系统d启动后续单元之前退出;
  • dbus - 预计守护进程在 D-Bus 总线上获取名称;
  • notify - 守护进程发送通知消息,通过 sd_notify(3) 或类似调用,当它完成启动时;
  • idle - 服务二进制文件的实际执行被延迟,直到所有活动作业被调度。请注意,此类型仅对改进控制台输出有用,并不作为一般单元排序工具。

设置 PID 文件的路径以使用 forking 启动类型。

pid_file:    # 一个绝对文件名,指向此守护进程的PID文件

您可以指定服务应该在其下执行的 UNIX 用户和组。参数可以取单个用户或组名,或一个数字 ID 作为值。对于系统服务和根用户的用户服务,默认值为 root,可以切换到另一个用户。对于任何其他用户的用户服务,不允许切换用户身份。因此,唯一允许的值是用户服务管理器正在运行的相同用户。如果未设置组,则使用默认用户组。

user:
group:

用下一个参数设置单元的调度优先级。它取值为 -20(最高优先级)到 19(最低优先级)之间的整数。

nice:    # 服务的默认优先级

以下选项指定进程的内存不足杀手的调整级别。它的取值为 -1000(禁用 OOM 杀手)到 1000(更倾向于 OOM 杀手)。

oom_score_adjust:

下一个参数允许您根据服务的状态指定将执行的命令。参数可以使用多次或其值可以包含多个命令。多条命令可以通过用分号分隔的方式连接到单个指令中。要执行的命令必须是绝对路径名。可以包含空格,但不允许控制字符。对于每个命令,第一个参数必须是可执行文件的绝对路径。空字符串将重置前面为该参数指定的命令列表。

# 当此服务启动时执行的命令
# 除非 `type` 是 `oneshot`,这里必须给出一个命令
exec_start:

# 在 `exec_start` 命令之前执行的命令
exec_start_pre:

# 在 `exec_start` 命令之后执行的命令
exec_start_post:

# 要执行的命令以停止通过 `exec_start` 启动的服务
exec_stop:

# 停止服务后执行的命令
exec_stop_post:

# 要执行的命令以触发服务中的配置重新加载
exec_reload:

设置服务在服务进程(主服务进程或由 'exec_start_pre'、'exec_start_post'、'exec_stop'、'exec_stop_post' 或 'exec_reload' 参数指定的进程)退出、被杀死或超时时是否应重启。restart 参数取以下值之一:

  • no(默认) - 服务将不会被重启;
  • on-success - 仅在服务进程干净退出时(退出代码为 0,或信号 SIGHUP、SIGINT、SIGTERM 或 SIGPIPE)重启服务;
  • on-failure - 当进程以非零退出代码退出、被信号终止、操作超时和配置的看门狗超时触发时,服务将重启;
  • on-abnormal - 当进程被信号终止、操作超时或触发看门狗超时时,服务将重启;
  • on-watchdog - 仅在服务进程因未捕获的信号退出时重启服务,该信号未指定为干净退出状态;
  • on-abort - 仅在服务的看门狗超时到期时重启服务;
  • always - 无论如何重启服务。
# 何时必须重启服务
restart:

您可以通过下一个参数指定上述命令的时间延迟。它接受以秒为单位的值或时间跨度值,如 '5min 20s'。restart_sec 参数配置在重启(如配置)服务之前的睡眠时间。timeout_sec 选项定义等待启动/停止命令处理的时间。

restart_sec:
timeout_sec:

使用 environment 参数为执行的进程设置环境变量列表。它包括变量及其值的字典。如果某个值包含空格,请使用双引号进行赋值。

您还可以从文本文件读取环境变量。为此,请将 environment_file 参数值设置为文件路径。

environment:       # 包含ENV变量的字典
environment_file:  # 包含环境变量的文件路径

工作目录由下一个参数指定。它在启动命令启动之前被设置为当前目录。

working_directory:

以下参数允许您选择执行进程的文件描述符(STDIN、STDOUT、STDERR)应连接到哪里。standard_input 参数取值为 "null"、"tty"、"tty-force"、"tty-fail"、"socket" 或 "fd"。standard_output 参数可以等于 "inherit"、"null"、"tty"、"journal"、"syslog"、"kmsg"、"journal+console"、"syslog+console"、"kmsg+console"、"socket" 或 "fd"。standard_error 的可用值与 standard_output 相同。

standard_input:
standard_output:
standard_error:

如果对任何 "standard_*" 参数指定 "tty"、"tty-force" 或 "tty-fail",那么您可以指定 tty 的路径。

tty_path:

如果服务在创建或修改后应处于重新启动/重新加载/启动/停止状态。

state:

它可以取值:restarted(默认)reloaded started stopped

安装部分选项

此部分变量承载单元的安装信息。可以多次使用以下两个参数,或指定以空格分隔的单元名称列表。列表包括从 requireswants 字段引用此服务的单元。

wanted_by:
required_by:

依赖

示例播放本

- hosts: app
  roles:
    - role: systemd_service
       systemd_service:
        # 默认服务名称
        railsapp:
          # 服务名称
          service_name: railsapp
          # 在启动时启动服务
          enabled: Yes
          # 启动服务时执行带有指定参数的命令
          exec_start: "/bin/bash -lc 'puma -C config/puma.rb'"
          # 使用指定目录作为当前目录
          working_directory: "/var/www/myapp"
          # 指定环境变量
          environment: {ENVVAR: value}
          # 使用此用户和组运行进程
          user: "deploy"
          group: "deploy"
          # 仅在未获得干净的退出代码或信号时重启服务
          restart: "on-failure"
          # 尝试在可能的情况下激活 'redis'
          wants: "redis.service"
          # 激活 'postgresql' 或在失败的情况下停止工作
          requires: "postgresql.service"
          # 多用户目标单元更倾向于运行此服务
          wanted_by: "multi-user.target"

许可

根据 MIT 许可 许可。

关于项目

Create and configure a systemd service

安装
ansible-galaxy install cimon-io.systemd-service
许可证
Unknown
下载
13.7k
拥有者
Continuous integration system with integrated staging server