Ansible不切换到目录以运行命令

时间:2019-09-18 15:43:25

标签: ansible

我正在使用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}

似乎没有先更改到该目录即可执行命令。有任何线索吗?

  

我知道该位置存在,我可以SSH进入服务器并cd进入服务器。


更新:如果我执行"{{ path_base }}/bin/{{ script_manager }} stop",则效果很好。无论如何,有什么更好的方法?

1 个答案:

答案 0 :(得分:4)

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

如果您确实要这样调用脚本,则必须在用户的PATH中添加{{ path_base }}/bin/

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

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

更进一步,您是IMO的走错误的道路:tomcat应该是机器上的注册服务,您应该使用相关模块进行操作:通用service或特定systemd之一,runitsysvinit ...

服务示例:

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