Ansible启动bash文件,忘记并返回终端

Ansible启动bash文件,忘记并返回终端,bash,ansible,Bash,Ansible,mybash.sh调用一个应该永远运行的python程序(理论上)。这意味着异步时间限制应该是无限的。但是使用下面的ansible行,它在时间限制后停止,在本例中为45。如果我删除async:45,ansible的执行将永远不会在终端返回,因为python程序会连续运行 - name: fire and forget command: sh mybash.sh async: 45 poll: 0 如何使ansible在终端中启动、忘记并返回ansible的执行(即m

mybash.sh
调用一个应该永远运行的python程序(理论上)。这意味着异步时间限制应该是无限的。但是使用下面的ansible行,它在时间限制后停止,在本例中为45。如果我删除
async:45
,ansible的执行将永远不会在终端返回,因为python程序会连续运行

  - name: fire and forget
    command: sh mybash.sh
    async: 45
    poll: 0

如何使ansible在终端中启动、忘记并返回ansible的执行(即mybash.sh调用的这个python程序将永远运行,终端中ansible的执行不应等待)?

如果这是您真正想要做的,而不是配置服务,您可以执行以下操作:

- name: fire and forget
  shell: nohup mybash.sh &

由于您将要使用它,您可能需要查看。

这确实是一个糟糕的做法。您应该使用ansible来配置服务。而且,
sh
不是bash。如果您使用
sh
启动它,它是一个POSIX sh脚本,而不是bash脚本……现在,如果您确实希望一个程序从启动它的进程中分离出来并在后台运行,那么您希望它执行的动作的动词是“daemonize”本身,而且会有很多搜索结果——但自我监控程序/脚本是不好的做法;最好使用您的操作系统提供的进程监控系统(它可以让您将其配置为在引导时启动;可以在失败后管理重新启动等)。强烈建议至少明确重定向stdout/stderr,以免在某处留下
nohup.out
。(就我个人而言,我倾向于将nohup视为不必要的愚蠢行为——用
disown
exec>/dev/null 2>&1
trap
命令清除
HUP
的默认行为,但……耸耸肩)
nohup
在ansible内部使用似乎很奇怪。