如何使用ansible运行二进制可执行文件并保持其运行?我可以使用命令/shell模块来执行此操作吗?
我有一个可执行文件,比如:carbonserver。我需要运行它并保持它运行,以便api可以与它交互。如果这是一个真正的服务,那么我将把任务委托给系统的服务处理程序,而不是ansible。在大多数现代linux发行版上,这通常是systemd,因此我将创建一个模板,生成一个新的systemd单元文件,然后使用ansible的systemd模块启动它: 模板/carbonserver.service.j2: 剧本:如何使用ansible运行二进制可执行文件并保持其运行?我可以使用命令/shell模块来执行此操作吗?,ansible,Ansible,我有一个可执行文件,比如:carbonserver。我需要运行它并保持它运行,以便api可以与它交互。如果这是一个真正的服务,那么我将把任务委托给系统的服务处理程序,而不是ansible。在大多数现代linux发行版上,这通常是systemd,因此我将创建一个模板,生成一个新的systemd单元文件,然后使用ansible的systemd模块启动它: 模板/carbonserver.service.j2: 剧本: - template: src: templates/carbonserv
- 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以再次启动它。您还可以将其配置为在系统启动时自动启动,等等
如果您有一个不支持systemd的Linux发行版,或者您想在其他类型的机器OSX或Windows上运行它,那么您可能需要使用特定操作系统自己的服务机制来实现这一点
但是,如果您只想使用ansible运行它一次,并且只想让它在后台运行,而不在乎它是否死掉,等等,那么您可以尝试其他方法,如:
- shell: "( ( nohup /usr/bin/carbonserver 1>/dev/null 2>&1 ) & )"
async: 5
poll: 0
这将在后台运行一个通用shell命令,确保ansible完成后不会杀死它,并在后台执行所有操作,以便下一个任务可以立即运行。请注意,只有在您真正不关心服务运行的情况下,这才是一种可行的方法,这很可能不是您想要的如果这是一个真正的服务,那么我会将任务委托给系统的服务处理程序,而不是ansible。在大多数现代linux发行版上,这通常是systemd,因此我将创建一个模板,生成一个新的systemd单元文件,然后使用ansible的systemd模块启动它: 模板/carbonserver.service.j2: 剧本:
- 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以再次启动它。您还可以将其配置为在系统启动时自动启动,等等
如果您有一个不支持systemd的Linux发行版,或者您想在其他类型的机器OSX或Windows上运行它,那么您可能需要使用特定操作系统自己的服务机制来实现这一点
但是,如果您只想使用ansible运行它一次,并且只想让它在后台运行,而不在乎它是否死掉,等等,那么您可以尝试其他方法,如:
- shell: "( ( nohup /usr/bin/carbonserver 1>/dev/null 2>&1 ) & )"
async: 5
poll: 0
这将在后台运行一个通用shell命令,确保ansible完成后不会杀死它,并在后台执行所有操作,以便下一个任务可以立即运行。请注意,只有当您真的不关心服务的运行时,这才是一种可行的方法,这很可能不是您想要的谢谢。这很有帮助,谢谢。这很有帮助。