gpt4 book ai didi

linux - nohup 和 & 在运行 bash 命令时有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:17 25 4
gpt4 key购买 nike

我有一个 Ansible 剧本,其中的任务如下:

- name: start the apache server
command: ./server.sh start chdir="/myapp"

server.sh 中:

#!/bin/bash
server_wrapper.py start

server_wrapper.py 中:

#!/usr/bin/python
import threading
import subprocess
cmd = "$APATCH_HOME/scripts/service.sh restart"
print cmd
ret = subprocess.call(cmd, shell=True)
if ret !=0
logging.critical("error happend, %d" % ret)

这会随机失败。当我手动 ssh 到 Ansible 剧本目标的远程服务器时,我可以通过运行 $APACHE_HOME/scripts/service.sh restart 看到,apache 可以成功运行,并且它会输出一些日志记录到控制台,诸如 Apache 成功启动 之类的东西,似乎带有标准输出。

但是当从 Ansible playbook 运行时,它随机失败,我必须按以下方式更改 server.sh:

#!/bin/bash
nohup server_wrapper.py start &

似乎 nohup 和 & 运算符已经解决了这个问题。

所以我想了解为什么 & operator 解决了我的问题,我明白 & 将启动一个子 shell 并在后台运行,它是否与标准 i/o 相关联,导致了问题?

最佳答案

只是预感,但我明白了

cmd = "$APATCH_HOME/scripts/service.sh restart"

不应该是 $APACHE_HOME。 (嗯,可能不行,因为它在本地启动时有效。)

但我的经验告诉我,本地和远程执行之间的差异主要是由环境差异造成的。

尝试在 server.sh 中添加 set >/tmp/env_$$.out 并在本地和使用 Ansible 运行它,然后检查(相关)差异在 2 个输出文件中。

关于linux - nohup 和 & 在运行 bash 命令时有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42689804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com