在ubuntu机器20.04EC2上,Ansible脚本“外壳”和直接运行的外壳命令之间的细微差别是什么?

bd1hkmkf  于 2022-10-04  发布在  Linux
关注(0)|答案(1)|浏览(106)

我带了一个流浪者脚本,它拉下一个仿生18,然后运行一个Ansible剧本,它生成两个EC2 ubuntu 20.04,它们成功地运行了我分配的每个“任务:”。我能够在发布者订阅方法的很大程度上自动下载和执行中运行我想要的一切。**问题是这样的:**我可以手动运行我的.sh和.py脚本,系统可以正常工作,但当我使用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 &

我试过了,最后只用了一个**“&”,并向我的用户帐户“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

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

有多种方法可以剥这只猫的皮,但我宁愿只修复我在外壳Ansible命令上的错误,而我看不到它。

bvjxkvbb

bvjxkvbb1#

正如第三个链接中的答案所解释的那样:

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

之所以会发生这种情况,是因为脚本进程是由Ansible产生的外壳的子进程。要在Ansible完成后保持进程运行,您需要否认此子进程。

正确的方法是将软件(在您的情况下是ZooKeeper)配置为服务。这方面的例子有很多,例如:

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

将其配置为服务后,可以使用Ansible service模块启动或停止它。

相关问题