我编写了一个简单的任务来回显文本并将其包装在 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 没有出现?
所以根据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出现在我需要的地方,并包含我想要的所有数据。