Gab*_*vay 5 python service daemon systemd ansible
我有一个已部署的systemd服务,希望由Ansible启动。
我的系统服务单元文件是这样的:
[Unit]
Description=Collector service
After=network.target mariadb.service
Requires=mariadb.service
[Service]
Type=simple
ExecStart=/opt/collector/app.py
WorkingDirectory=/opt/collector
Restart=on-abort
User=root
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我正在使用,Type=simple因为这看起来像是正确的解决方案(也是此Question中的首选解决方案)。
我尝试使用Type=oneshot,以及(由初始用户使这个问题进行重复的建议这个问题),但问题是,/opt/collector/app.py脚本是一个长期运行的进程:
while True:
t = threading.Thread(...)
t.start()
t.join()
time.sleep(15)
Run Code Online (Sandbox Code Playgroud)
并且Type=oneshot,Ansible将永远阻止。
我的Ansible起始代码是:
- name: start Collector service
systemd:
name: collector
state: started
enabled: yes
Run Code Online (Sandbox Code Playgroud)
在目标系统上,systemctl将显示:
[root@srv01 /]# systemctl
UNIT LOAD ACTIVE SUB DESCRIPTION
dev-sda1.device loaded activating tentative /dev/sda1
-.mount loaded active mounted /
dev-mqueue.mount loaded active mounted POSIX Message Queue File System
etc-hostname.mount loaded active mounted /etc/hostname
etc-hosts.mount loaded active mounted /etc/hosts
etc-resolv.conf.mount loaded active mounted /etc/resolv.conf
run-user-0.mount loaded active mounted /run/user/0
session-73.scope loaded active running Session 73 of user root
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
haproxy.service loaded active running HAProxy Load Balancer
<E2><97><8F> collector.service loaded failed failed Collector service
....
Run Code Online (Sandbox Code Playgroud)
由于Python进程异常(使用未定义的变量),该服务失败。
但是我的Ansible剧本运行不会失败:
TASK [inventory : start Collector service] *********************************
changed: [srv01]
Run Code Online (Sandbox Code Playgroud)
我尝试systemd和serviceAnsible模块一起使用,其行为是相同的。
我如何使Ansible:
active running状态while True?小智 3
当我遇到同样的问题时,我偶然发现了这个问题,服务默默失败。我还发现了一份描述此问题的错误报告,经过一番研究后我找到了解决方法:
- name: start Collector service
systemd:
name: collector
state: started
enabled: yes
- name: make sure Collector service is really running
command: systemctl is-active collector
Run Code Online (Sandbox Code Playgroud)
请注意,对于Type=simple服务,只有当服务本身在启动后立即失败时,这才会失败。
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |