小编Sad*_*nny的帖子

在 Ansible 中以分离模式运行远程脚本/应用程序

我无法从 Ansible 剧本“分离地”运行远程应用程序启动脚本。脚本将运行,但我无法让它获得/保持分离。我可能做错了什么,但什么?

这是我的复制器。

  1. 我在 Test.java 中的远程 Java 应用程序运行了 10 秒:

    class Test {
        public static void main(String[] args) {
            for (int I = 1; I <= 10; i++) {
                System.out.println("Hello world " + I);
    
                try { Thread.sleep(1000);
                } catch (Exception e) { System.out.println("Exception caught: " + e);
                }
    } } }
    
    Run Code Online (Sandbox Code Playgroud)

将其编译为 Test.class (javac Test.java),然后使用“java Test”运行该类按预期工作(给出 10 条输出消息,然后退出)。

  1. 我运行此应用程序的可执行 shell 脚本(如在 chmod 755 中)如下所示:

    #!/bin/bash
    java Test &
    
    Run Code Online (Sandbox Code Playgroud)

手动运行它也完全没问题:Java 应用程序在我的控制台中运行并生成相同的标准输出,但 shell 脚本已经退出,我重新控制了我的 bash 会话。

  1. 现在通过来自另一台服务器的 ansible playbook 运行它。我尝试以不同的方式使用“command”模块和“shell”模块,但无济于事......

    --- …
    Run Code Online (Sandbox Code Playgroud)

script bash ansible

12
推荐指数
3
解决办法
5万
查看次数

Ansible 命令任务遇到“Exec 格式错误”

我编写了这个 ansible 任务来在远程流浪盒上运行一个进程。(嗯,实际上 ansible 文件本身要长得多,但这是一个运行启动脚本的复制器。)

---
- hosts: myappname_server
  vars_files:
    - install_myappname_vars.yaml
  gather_facts: false
  sudo: true
  sudo_user: "{{ project_name }}"

  tasks:
  - name: Restart application
    command: "{{ project_target_dir_env }}/run"
    args:
      chdir: "{{ project_target_dir_env }}"
Run Code Online (Sandbox Code Playgroud)

它适用于包含的 vars 文件中的这些 vars:

---
project_name: myappname
project_source_dir_files: files/myappname
project_source_dir_env: "{{ project_source_dir_files }}/environment_files"
project_target_root: /home/myappname
project_target_dir_env: "{{ project_target_root }}/bin"
Run Code Online (Sandbox Code Playgroud)

这个想法是在远程框上使用用户“myappname”(由“myappname_server”正确别名,我运行的其他播放效果很好)在将目录更改为“/”后运行“/home/myappname/bin/run”家/我的应用程序名称/bin”。如果我手动执行此操作,一切正常,即目录存在,文件可读,脚本工作等,一切都很好。但是如果我执行脚本,生成的ansible 执行代码似乎有问题。是我和我的配置希望如此)?它是 ansible 吗?

我用 -vvvv 运行它以获取大量信息:

monsterkill@monsterkill-ub-dt:~/playbooks$ ansible-playbook install_myappname_restart.yaml -vvvv

PLAY [myappname_server] ********************************************************** 

TASK: [Restart application] *************************************************** 
<vagrant1> ESTABLISH CONNECTION FOR USER: vagrant
<vagrant1> …
Run Code Online (Sandbox Code Playgroud)

ansible

8
推荐指数
2
解决办法
2万
查看次数

标签 统计

ansible ×2

bash ×1

script ×1