gpt4 book ai didi

Ansible 不更改目录以运行命令

转载 作者:行者123 更新时间:2023-12-05 02:11:04 24 4
gpt4 key购买 nike

我正在使用 Ansible 2.8.4-1.el7 来自动执行一些任务。自从我开始学习该工具以来,我大部分时间都在浏览官方文档(更具体地说,我正在关注 these examples )。

我只是想执行一个管理 Tomcat 实例的脚本:

- name: Stop service
command: "{{ script_manager }} stop"
args:
chdir: "{{ path_base }}/bin/"

我预先设置了这些变量:

path_base: /some/path/tomcat9_dev/

script_manager: tomcat9_dev

...但我仍然收到此错误消息:

TASK [tomcat : Stop service] ***************************************************
fatal: [tld.server.name]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "cmd": "tomcat9_dev stop", "msg": "[Errno 2] No such file or directory", "rc": 2}

看起来它并没有先进入那个目录来执行命令。有什么线索吗?

I know the location exists, I can SSH into the server(s) and cd into it.


更新:如果我执行 "{{ path_base }}/bin/{{ script_manager }} stop" 它工作正常。无论如何,什么是更好的方法?

最佳答案

当前目录不是 *nix 操作系统中 PATH 的一部分。将目录更改为正确的位置是不够的。

如果你真的想这样调用你的脚本,你必须添加 {{ path_base }}/bin/ 到你用户的 PATH。

与此同时,您可以通过相对于当前目录调用脚本来利用 chdir:

- name: Stop service
command: "./{{ script_manager }} stop"
args:
chdir: "{{ path_base }}/bin/"

此外,您是 IMO 在错误的轨道上:tomcat 应该是机器上的注册服务,您应该使用相关模块来操作它:通用 service或特定的 systemd 之一, runit , sysvinit ...

服务示例:

- name: Make sure tomcat_dev is stopped
service:
name: tomcat_dev
state: stopped

关于Ansible 不更改目录以运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996500/

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