我正在使用ansible连接到一台远程Linux机器。我想执行一个应用程序特定的命令,这将给我的应用程序version.But在此之前,必须执行一个外壳脚本,这将设置上述命令的执行环境。
目前,每个任务似乎都在单独的shell中执行
在执行/ds1/home/has9e/CS9/psconfig.sh之后,我想执行psadmin -v
- command: "{{ item }}"
args:
chdir: "/ds1/home/has9e/CS9/"
with_items:
- "./psconfig.sh"
- "psadmin -v"
register: ptversion
ignore_errors: true错误是:
failed: [slc13rog] (item=./psconfig.sh) => {
"changed": false,
"cmd": "./psconfig.sh",
"invocation": {
"module_args": {
"_raw_params": "./psconfig.sh",
"_uses_shell": false,
"argv": null,
"chdir": "/ds1/home/has9e/CS9/",
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"item": "./psconfig.sh",
"msg": "[Errno 8] Exec format error",
"rc": 8
}发布于 2019-04-10 19:00:31
command模块(和shell模块)在子进程中执行命令。这意味着,如果运行设置环境变量的shell脚本,则对任何后续命令都没有影响:变量是在子进程中设置的,子进程随后退出。
如果希望在shell脚本中设置的环境变量对后续命令生效,则需要使它们都成为同一shell脚本的一部分。例如:
- shell: |
./psconfig.sh
psadmin -v
args:
chdir: "/ds1/home/has9e/CS9/"
register: ptversion
ignore_errors: true 在这里,我们使用YAML |操作符向shell模块传递一个文本块,但我们也可以改为这样写:
- shell: "./psconfig.sh;psadmin -v"
args:
chdir: "/ds1/home/has9e/CS9/"
register: ptversion
ignore_errors: true 这两个替代方案在功能上是相同的。在这两种情况下,我们都将psconfig.sh脚本放入shell环境,然后在同一shell中运行psadmin任务。
https://stackoverflow.com/questions/55609962
复制相似问题