Ansible, чтобы открыть терминал и запустить программу на удаленной машине с Ubuntu - PullRequest
0 голосов
/ 12 февраля 2020

Я использую Ansible для настройки экземпляра Ubuntu 18.04 (удаленного) и запуска определенных программ в пользовательской среде. У меня есть команда, которую я хотел бы выполнить внутри терминала на пульте дистанционного управления, которая требует, чтобы терминал оставался открытым.

Если я в Ubuntu и выполняю следующую команду, я получаю именно то, что ожидаю.

# DISPLAY=:0 nohup gnome-terminal -- roscore
  1. Использовать текущий дисплей для пользователя
  2. nohup, чтобы терминал не закрывался, если родительский терминал закрывается
  3. запускать новый экземпляр gnome-терминала
  4. - = запустить команду внутри нового экземпляра gnome-терминала
  5. roscore можно заменить любой командой, для которой требуется открыть поток в окне терминала

My * Задача 1030 * выглядит следующим образом при попытке воссоздать ту же команду

- name: Start terminal on remote machine
  shell:
  args:
    cmd: DISPLAY=:0 nohup gnome-terminal -- roscore
    executable: /bin/bash

При выполнении этой команды я получаю следующий подробный вывод

changed: [] => {
"changed": true,
"cmd": "DISPLAY=:0 nohup gnome-terminal -- roscore",
"delta": "0:00:00.243119",
"end": "",
"invocation": {
    "module_args": {
        "_raw_params": "DISPLAY=:0 nohup gnome-terminal -- roscore",
        "_uses_shell": true,
        "argv": null,
        "chdir": null,
        "creates": null,
        "executable": "/bin/bash",
        "removes": null,
        "stdin": null,
        "stdin_add_newline": true,
        "strip_empty_ends": true,
        "warn": true
    }
},
"rc": 0,
"start": "",
"stderr": "nohup: ignoring input",
"stderr_lines": [
    "nohup: ignoring input"
],
"stdout": "",
"stdout_lines": []
}

Когда я выполняю это, кажется, что терминал на мгновение открывается на удаленном компьютере, но не остается открытым. Что делает Ansible, чтобы закрыть сеанс удаленного терминала после выполнения команды?

Мне нужна задача Ansible, которая позволит открывать окно терминала на удаленном компьютере с Ubuntu 18.04. Целью Stretch было бы заставить команду работать в теперь открытом терминале.

Любая помощь будет оценена и рада уточнить, где это необходимо. Спасибо!

1 Ответ

0 голосов
/ 13 февраля 2020

Я решил go в другом направлении, но хотел опубликовать то, что я узнал.

Чтобы выполнить команду из Ansible, которая откроет окно терминала на машине Ubuntu 18.04 (удаленной) потребуется следующая команда:

- name: Start terminal on remote machine
  shell:
  args:
    cmd: DISPLAY=:0 nohup gnome-terminal </dev/null >/dev/null 2>&1 &
    executable: /bin/bash

Обратите внимание на </dev/null >/dev/null 2>&1 &. Это необходимо для Ansible, чтобы иметь возможность отказаться от процесса, в то же время позволяя терминалу оставаться открытым на удаленной машине.

В теории я не доказал это, но для запуска команда внутри терминала потребует дополнительного аргумента gnome-терминала -e.

-e, --command=STRING
             Execute the argument to this option inside the terminal.

Пример

- name: Start terminal on remote machine
  shell:
  args:
    cmd: DISPLAY=:0 nohup gnome-terminal -e "bash -c 'whoami'" </dev/null >/dev/null 2>&1 &
    executable: /bin/bash
...