我提供了一个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""以及将显式调用传递到我的用户帐户"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服务模块启动或停止它。