我使用 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"这样做,效果很好。无论如何,什么是更好的方法?
当前目录不是 *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或特定模块之一systemd,runit...sysvinit
服务示例:
- name: Make sure tomcat_dev is stopped
service:
name: tomcat_dev
state: stopped
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4703 次 |
| 最近记录: |