使用 nohup 时,ansible shell 不会创建 nohup.out

zer*_*ool 2 ansible

我编写了一个简单的任务来回显文本并将其包装在 nohup 命令周围。通常,当我执行nohup echo testnohup.out 时,会在同一工作目录中创建。当我从 ansible 执行此操作时,nohup.out 完全丢失

- name: nohup
  tags: nohup
  shell: 'nohup echo test'
  args:
    chdir: /tmp
    executable: /bin/bash
  async: 45
  poll: 0
Run Code Online (Sandbox Code Playgroud)

上面有什么问题吗?为什么 nohup.out 没有出现?

zer*_*ool 6

所以根据nohup的文档

如果标准输入是终端,则从不可读的文件重定向它。如果标准输出是终端,则尽可能将输出附加到“nohup.out”,否则附加到“$HOME/nohup.out”。

Ansible 似乎无法以这种方式工作,因此没有创建 nohup.out 文件。为了解决这个问题,我通过以下方式修改了任务

- name: nohup
  tags: nohup
  shell: 'nohup echo test > nohup.out 2>&1 &'
  args:
    chdir: /tmp
    executable: /bin/bash
  become: yes
  become_user: user
  become_method: su
Run Code Online (Sandbox Code Playgroud)

这里的关键部分是在命令> nohup.out 2>&1 &范围内shell。关于技术的最后三行become与此无关。

最后,nohup.out出现在我需要的地方,并包含我想要的所有数据。