ansible 脚本"SHELL"和在 ubuntu 机器 20.04 EC2 上直接运行的 Shell 命令的细微区别?



我提供了一个Vagrant脚本,该脚本下拉一个仿生18,该仿生18然后运行一个可解析的剧本,该剧本生成两个EC2 ubuntu 20.04;任务:";我分配。我能够在很大程度上自动下载和执行发布者-订阅者方法中运行我想要的一切问题是:我可以手动运行.sh和.py脚本,系统也能正常工作,但当我使用ansible方法时,我一定做错了什么,就像这些解决方案所指向的那样:

  • Shell命令在直接主机上有效,但在Ansible上失败
  • 后台远程主机上的ansible run命令
  • https://superuser.com/questions/870871/run-a-remote-script-application-in-detached-mode-in-ansible

我想做的就是简单地纠正这个问题,并在后台运行它。

- name: Start Zookeeper
shell: sudo /usr/local/kafka-server/bin/zookeeper-server-start.sh  /usr/local/kafka-server/config/zookeeper.properties </dev/null >/dev/null 2>&1 &
- name: Sleep for 30 seconds and continue with play
wait_for:
timeout: 15
- name: Start Kafka broker
shell: sudo /usr/local/kafka-server/bin/kafka-server-start.sh  /home/ubuntu/usr/local/kafka-server/config/server.properties </dev/null >/dev/null 2>&1 &

我只试过一个"strong"&quot以及将显式调用传递到我的用户帐户"strong>";ubuntu"。我使用了"变成:是的">。我真的不想使用守护进程,尤其是因为其他人以前似乎已经成功地使用了它。

我想指出的是,对你来说,一个我似乎无法思考的明显迹象是,当我不包括&,但是如果我确实包括&它完全失败了,这让我觉得它正在运行,但脚本不会继续,因为这些都是侦听器进程。

#     - name: Start Zookeeper
#       become: yes
#       script: /usr/local/kafka-server/bin/zookeeper-server-start.sh
#       args: 
#         chdir: /usr/local/kafka-server/config/zookeeper.properties

这失败了,如果第一块代码有一个简单的解决方案,我宁愿不创建另一个脚本来复制目录并本地化它。

有多种方法可以剥这只猫的皮,但我宁愿修正我在shell上的错误,我看不到它。

如第三个链接中的答案所述:

https://superuser.com/questions/870871/run-a-remote-script-application-in-detached-mode-in-ansible

发生这种情况是因为脚本进程是ansible派生的shell的子进程。要在ansible完成后保持进程运行,您需要否认此子进程。

要做到这一点,正确的方法是将软件(在您的情况下是zookeeper(配置为服务。有很多这样的例子,例如:

https://askubuntu.com/questions/979498/how-to-start-a-zookeeper-daemon-after-booting-under-specific-user-in-ubuntu-serv

一旦您将其配置为服务,就可以使用ansible服务模块启动或停止它。

相关内容

  • 没有找到相关文章

最新更新