Ansible 未更改为目录来运行命令

x80*_*486 3 ansible

我使用 Ansible2.8.4-1.el7来自动执行一些任务。自从我开始学习该工具以来,我大多数时候都会浏览官方文档(更具体地说,我正在遵循这些示例)。

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

- name: Stop service
  command: "{{ script_manager }} stop"
  args:
    chdir: "{{ path_base }}/bin/"
Run Code Online (Sandbox Code Playgroud)

我预先设置这些变量:

path_base: /some/path/tomcat9_dev/

script_manager: tomcat9_dev
Run Code Online (Sandbox Code Playgroud)

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

- name: Stop service
  command: "{{ script_manager }} stop"
  args:
    chdir: "{{ path_base }}/bin/"
Run Code Online (Sandbox Code Playgroud)

看起来它并没有首先更改到该目录来执行命令。有什么线索吗?

我知道该位置存在,我可以通过 SSH 连接到服务器并cd进入其中。


更新:如果我"{{ path_base }}/bin/{{ script_manager }} stop"这样做,效果很好。无论如何,什么是更好的方法?

Zei*_*tor 5

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

如果您确实想像这样调用脚本,则必须添加{{ path_base }}/bin/到用户的路径中。

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

- name: Stop service
  command: "./{{ script_manager }} stop"
  args:
    chdir: "{{ path_base }}/bin/"
Run Code Online (Sandbox Code Playgroud)

此外,在我看来,您走错了路:tomcat应该是机器上的注册服务,您应该使用相关模块来操作它:通用模块service或特定模块之一systemdrunit...sysvinit

服务示例:

- name: Make sure tomcat_dev is stopped
  service:
    name: tomcat_dev
    state: stopped
Run Code Online (Sandbox Code Playgroud)