ansible.builtin.systemd_service 模块 – 管理 systemd 单元

注意

此模块是 ansible-core 的一部分,包含在所有 Ansible 安装中。在大多数情况下,即使不指定 collections 关键字,您也可以使用简短的模块名称 systemd_service。但是,我们建议您使用 完整限定集合名称 (FQCN) ansible.builtin.systemd_service 以便轻松链接到模块文档并避免与可能具有相同模块名称的其他集合发生冲突。

摘要

别名:systemd

需求

执行此模块的主机需要以下需求。

  • 由 systemd 管理的系统。

参数

参数

注释

daemon_reexec

别名:daemon-reexec

布尔值

在 Ansible 2.8 中添加

在执行任何其他操作之前运行 daemon_reexec 命令,systemd 管理器将序列化管理器状态。

选项

  • false ← (默认)

  • true

daemon_reload

别名:daemon-reload

布尔值

在执行任何其他操作之前运行 daemon-reload,以确保 systemd 已读取所有更改。

当设置为 true 时,即使模块不启动或停止任何内容,也会运行 daemon-reload

选项

  • false ← (默认)

  • true

enabled

布尔值

单元是否应在启动时启动。至少需要 stateenabled 中的一个。

如果设置,则需要 name

选项

  • false

  • true

force

布尔值

是否覆盖现有的符号链接。

选项

  • false

  • true

masked

布尔值

单元是否应被屏蔽。屏蔽的单元无法启动。

如果设置,则需要 name

选项

  • false

  • true

name

别名:service、unit

字符串

单元的名称。此参数采用要使用的单元的精确名称。

如果未给出扩展名,则默认为 .service,如 systemd。

在 chroot 环境中使用时,始终需要使用扩展名指定单元的名称。例如,crond.service

no_block

布尔值

不要同步等待请求的操作完成。排队的作业将继续,而 Ansible 不会阻塞其完成。

选项

  • false ← (默认)

  • true

scope

字符串

在 Ansible 2.7 中添加

在给定的服务管理器作用域内运行 systemctl,可以是默认系统作用域 system、当前用户的作用域 user 或所有用户的作用域 global

要使 systemd 与 user 一起工作,执行用户必须拥有其自己的 dbus 实例已启动并可访问(systemd 要求)。

用户 dbus 进程通常在正常登录期间启动,但在 Ansible 任务运行期间不会启动。否则,您可能会收到“无法连接到总线:没有这样的文件或目录”错误。

用户必须具有访问权限,通常通过设置 XDG_RUNTIME_DIR 变量来授予,请参见下面的示例。

选项

  • "system" ← (默认)

  • "user"

  • "global"

state

字符串

started/stopped 是幂等操作,除非必要,否则不会运行命令。restarted 将始终重新启动单元。reloaded 将始终重新加载,如果服务在重新加载时未运行,则会启动它。

如果设置,则需要 name

选项

  • "reloaded"

  • "restarted"

  • "started"

  • "stopped"

属性

属性

支持

描述

check_mode

支持:完全支持

可以在 check_mode 中运行并返回更改状态预测,而无需修改目标,如果不支持,则会跳过该操作。

diff_mode

支持:不支持

在差异模式下时,将返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息

platform

平台: posix

可以对其进行操作的目标操作系统/系列

备注

注意

  • stateenabledmasked 需要 name

  • 在 2.4 之前,您始终需要 name

  • 名称中不支持通配符,换句话说,postgres*.service

  • 服务名称可能因特定的操作系统/发行版而异。

  • 当有多个属性时,执行顺序是先启用/禁用,然后屏蔽/取消屏蔽,然后处理服务状态。据报道,如果您手动执行相同操作,systemctl 的行为可能会因操作顺序而异。

示例

- name: Make sure a service unit is running
  ansible.builtin.systemd_service:
    state: started
    name: httpd

- name: Stop service cron on debian, if running
  ansible.builtin.systemd_service:
    name: cron
    state: stopped

- name: Restart service cron on centos, in all cases, also issue daemon-reload to pick up config changes
  ansible.builtin.systemd_service:
    state: restarted
    daemon_reload: true
    name: crond

- name: Reload service httpd, in all cases
  ansible.builtin.systemd_service:
    name: httpd.service
    state: reloaded

- name: Enable service httpd and ensure it is not masked
  ansible.builtin.systemd_service:
    name: httpd
    enabled: true
    masked: no

- name: Enable a timer unit for dnf-automatic
  ansible.builtin.systemd_service:
    name: dnf-automatic.timer
    state: started
    enabled: true

- name: Just force systemd to reread configs (2.4 and above)
  ansible.builtin.systemd_service:
    daemon_reload: true

- name: Just force systemd to re-execute itself (2.8 and above)
  ansible.builtin.systemd_service:
    daemon_reexec: true

- name: Run a user service when XDG_RUNTIME_DIR is not set on remote login
  ansible.builtin.systemd_service:
    name: myservice
    state: started
    scope: user
  environment:
    XDG_RUNTIME_DIR: "/run/user/{{ myuid }}"

返回值

常见返回值已在此处记录 此处,以下是此模块特有的字段

描述

status

字典

包含 systemctl show 返回的键=值对的字典。

返回:成功

示例:{"ActiveEnterTimestamp": "Sun 2016-05-15 18:28:49 EDT", "ActiveEnterTimestampMonotonic": "8135942", "ActiveExitTimestampMonotonic": "0", "ActiveState": "active", "After": "auditd.service systemd-user-sessions.service time-sync.target systemd-journald.socket basic.target system.slice", "AllowIsolate": "no", "Before": "shutdown.target multi-user.target", "BlockIOAccounting": "no", "BlockIOWeight": "1000", "CPUAccounting": "no", "CPUSchedulingPolicy": "0", "CPUSchedulingPriority": "0", "CPUSchedulingResetOnFork": "no", "CPUShares": "1024", "CanIsolate": "no", "CanReload": "yes", "CanStart": "yes", "CanStop": "yes", "CapabilityBoundingSet": "18446744073709551615", "ConditionResult": "yes", "ConditionTimestamp": "Sun 2016-05-15 18:28:49 EDT", "ConditionTimestampMonotonic": "7902742", "Conflicts": "shutdown.target", "ControlGroup": "/system.slice/crond.service", "ControlPID": "0", "DefaultDependencies": "yes", "Delegate": "no", "Description": "Command Scheduler", "DevicePolicy": "auto", "EnvironmentFile": "/etc/sysconfig/crond (ignore_errors=no)", "ExecMainCode": "0", "ExecMainExitTimestampMonotonic": "0", "ExecMainPID": "595", "ExecMainStartTimestamp": "Sun 2016-05-15 18:28:49 EDT", "ExecMainStartTimestampMonotonic": "8134990", "ExecMainStatus": "0", "ExecReload": "{ path=/bin/kill ; argv[]=/bin/kill -HUP $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "ExecStart": "{ path=/usr/sbin/crond ; argv[]=/usr/sbin/crond -n $CRONDARGS ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "FragmentPath": "/usr/lib/systemd/system/crond.service", "GuessMainPID": "yes", "IOScheduling": "0", "Id": "crond.service", "IgnoreOnIsolate": "no", "IgnoreOnSnapshot": "no", "IgnoreSIGPIPE": "yes", "InactiveEnterTimestampMonotonic": "0", "InactiveExitTimestamp": "Sun 2016-05-15 18:28:49 EDT", "InactiveExitTimestampMonotonic": "8135942", "JobTimeoutUSec": "0", "KillMode": "process", "KillSignal": "15", "LimitAS": "18446744073709551615", "LimitCORE": "18446744073709551615", "LimitCPU": "18446744073709551615", "LimitDATA": "18446744073709551615", "LimitFSIZE": "18446744073709551615", "LimitLOCKS": "18446744073709551615", "LimitMEMLOCK": "65536", "LimitMSGQUEUE": "819200", "LimitNICE": "0", "LimitNOFILE": "4096", "LimitNPROC": "3902", "LimitRSS": "18446744073709551615", "LimitRTPRIO": "0", "LimitRTTIME": "18446744073709551615", "LimitSIGPENDING": "3902", "LimitSTACK": "18446744073709551615", "LoadState": "loaded", "MainPID": "595", "MemoryAccounting": "no", "MemoryLimit": "18446744073709551615", "MountFlags": "0", "Names": "crond.service", "NeedDaemonReload": "no", "Nice": "0", "NoNewPrivileges": "no", "NonBlocking": "no", "NotifyAccess": "none", "OOMScoreAdjust": "0", "OnFailureIsolate": "no", "PermissionsStartOnly": "no", "PrivateNetwork": "no", "PrivateTmp": "no", "RefuseManualStart": "no", "RefuseManualStop": "no", "RemainAfterExit": "no", "Requires": "basic.target", "Restart": "no", "RestartUSec": "100ms", "Result": "success", "RootDirectoryStartOnly": "no", "SameProcessGroup": "no", "SecureBits": "0", "SendSIGHUP": "no", "SendSIGKILL": "yes", "Slice": "system.slice", "StandardError": "inherit", "StandardInput": "null", "StandardOutput": "journal", "StartLimitAction": "none", "StartLimitBurst": "5", "StartLimitInterval": "10000000", "StatusErrno": "0", "StopWhenUnneeded": "no", "SubState": "running", "SyslogLevelPrefix": "yes", "SyslogPriority": "30", "TTYReset": "no", "TTYVHangup": "no", "TTYVTDisallocate": "no", "TimeoutStartUSec": "1min 30s", "TimeoutStopUSec": "1min 30s", "TimerSlackNSec": "50000", "Transient": "no", "Type": "simple", "UMask": "0022", "UnitFileState": "enabled", "WantedBy": "multi-user.target", "Wants": "system.slice", "WatchdogTimestampMonotonic": "0", "WatchdogUSec": "0"}

作者

  • Ansible核心团队