ansible 运行持续进程及配置环境变量

2020/04/02 Linux ansible

ansible 运行持续进程及配置环境变量

配置环境变量

ansible 是通过 ssh 登陆的,同时也是 Non-Login 的方式登陆,这种登陆情况下,部分环境参数是拿不到的。Login 和 Non-Login 的区别可以参考 Difference between Login shell and Non login shell

那么如果一行 shell 运行的指令需要用到环境参数该怎么处理?

根据 Non-Login shell 调用顺序,~/.bashrc 是会被调用的,所以可以想办法把参数文件写在 ~/.bashrc 中,这样就可以运行 shell。

另一种思路是,不想破坏系统的 ~/.bashrc 文件,或者环境变量本身也是经常变的,那么就自制一个文件,通过 source 启用,设想很好,但是实际操作不行,我这边的环境(ubuntu 18.04 server)提示 source:command not found。有些解释是,ansible 的 shell 不是 bash,没有 bash 的特性。

但 source 的方法不行,还有另一个方法,启用 environment。

---
- hosts: all
  remote_user: test
  gather_facts: True
  tasks:
    # 在需要环境的任务下,一一指定变量,在执行过程中会导入这些变量
    - name: some command need environment
      shell:
        cmd: xxx yyy zzz
        chdir: /your/path
      environment:
        ARGS1: 1
        ARGS: 2

后台持续运行

后台持续运行的方法很多,正规点的利用 supervisord,systemd 配置一个服务,让服务在后台运行,但这需要配置文件,有没有更好的处理方法,nohup 能否在 ansible 中使用,答案是:可以。

唯一需要注意的是,nohup 指令需要完整,也就是对标准错误输出需要重定向到标准输出,最后再加个 & 实现后台运行。

---
- hosts: all
  remote_user: test
  gather_facts: True
  tasks:
    # 在需要环境的任务下,一一指定变量,在执行过程中会导入这些变量
    - name: some command need environment
      shell:
        cmd: nohup commanda > x.out 2<&1 &
        chdir: /your/path

参考

Search

    Table of Contents