我有一个可执行文件说:carbonserver。我需要运行它并保持运行,以便api可以与它进行交互。
答案 0 :(得分:4)
如果这是一个真正的服务,那么我会将任务委托给系统的服务处理程序而不是ansible。在大多数现代Linux发行版中,这通常是systemd,所以我会创建一个生成新systemd单元文件的模板,然后使用ansible的systemd模块启动它:
templates/carbonserver.service.j2
:
[Unit]
Description=Carbon Server
[Service]
ExecStart=/usr/bin/carbonserver
[Install]
WantedBy=multi-user.target
剧本:
- template:
src: templates/carbonserver.service.j2
dest: /etc/systemd/system/carbonserver.service
owner: bin
group: wheel
mode: 0644
- systemd:
name: carbonserver
state: started
enabled: True
如果您的服务器是您希望系统自己管理的内容,则这是首选方法。例如,如果它停止或死亡,您可以配置systemd以再次启动它。您还可以将其配置为在系统启动时自动启动等。
如果您的Linux发行版不支持systemd,或者您希望在其他类型的计算机(OSX或Windows)上运行它,那么您可能需要使用特定操作系统自己的服务机制来执行此操作。
但是,如果您只想使用ansible运行一次,并且只想让它在后台运行(并且不关心它是否会死亡等),那么您可以尝试其他一些:
- shell: "( ( nohup /usr/bin/carbonserver 1>/dev/null 2>&1 ) & )"
async: 5
poll: 0
这在后台运行一个通用shell命令,确保它在ansible完成时不会被杀死,并在后台完成所有操作,因此下一个任务可以立即运行。请注意,如果您真的不关心您的服务运行,这只是一种可行的方法,这很可能不是您想要的