Выполните программу на удалённом сервере и отправьте полученный файл обратно.

Вопрос или проблема

У нас есть мощный сервер для компиляции любого кода. По некоторым причинам мне в общем не разрешают копировать мои файлы на сервер, и когда я могу, я могу использовать только /tmp, который будет удален после перезагрузки. И это действительно раздражает, когда приходится копировать файлы, компилировать код и копировать выходной пакет на мой личный компьютер, чтобы потом файлы были удалены при перезагрузке.

Возможно ли отправить запрос на сервер (с моего компьютера, на котором находятся файлы, пример команды: gcc test.c -o output.file) и перенаправить вывод обратно на мой компьютер?

Сервер работает на FreeBSD версии 12.1.

Это может показаться избыточным, но я действительно рекомендую использовать Ansible. Это действительно гибкий инструмент и предоставляет вам первый шаг к «большим» паттернам автоматизации.

Ответ или решение

Как исполнить программу на удалённом сервере и получить результирующий файл обратно

В современных условиях разработки программного обеспечения и управления системами часто возникает необходимость выполнять определённые задачи на мощных удалённых серверах. Это может включать компиляцию кода, анализ данных или выполнение других вычислений. Однако возникает ситуация, когда по соображениям безопасности или политики доступ к данным ограничен, и загрузка файлов на удалённый сервер невозможна. В таких случаях возникает вопрос: как можно запустить программу на удалённом сервере и получить файл с результатами обратно на свою локальную машину?

Понимание проблемы

Ваша задача состоит в следующем:

  • Выполнить компиляцию кода (например, gcc test.c -o output.file) на удалённом сервере под управлением FreeBSD 12.1.
  • При этом не загружая файлы на сервер, кроме временных, которые удаляются после перезагрузки.
  • Вернуть результат выполнения (выходной файл) обратно на вашу локальную машину.

Решение с использованием Ansible

Одним из наиболее эффективных решений этой задачи является использование инструмента автоматизации, такого как Ansible. Ansible позволяет управлять удалёнными серверами без необходимости предварительного копирования файлов на них.

Шаг 1: Установка Ansible

Убедитесь, что в вашей локальной системе установлен Ansible. Это можно сделать с помощью пакетного менеджера вашей системы.

sudo apt-get install ansible  # Для Ubuntu/Debian
# или
sudo yum install ansible      # Для CentOS/RHEL
Шаг 2: Настройка инвентарного файла

Создайте инвентарный файл (например, inventory.ini), который будет содержать информацию о вашем удалённом сервере:

[remote_server]
remote_server_ip ansible_user=your_username
Шаг 3: Создание Ansible playbook

Создайте файл playbook, например playbook.yml, который будет содержать задачи для выполнения:

---
- name: Compile and retrieve output
  hosts: remote_server
  tasks:
    - name: Upload source file
      copy:
        src: /path/to/local/test.c
        dest: /tmp/test.c

    - name: Compile code
      command: gcc /tmp/test.c -o /tmp/output.file

    - name: Download output file
      fetch:
        src: /tmp/output.file
        dest: /path/to/local/directory/
        flat: true

    - name: Clean up
      file:
        path: /tmp/test.c
        state: absent

    - name: Clean up
      file:
        path: /tmp/output.file
        state: absent
Шаг 4: Запуск playbook

Для выполнения playbook выполните следующую команду в терминале:

ansible-playbook -i inventory.ini playbook.yml
Объяснение процесса
  1. Загрузка исходного файла: Используя модуль copy, ваш локальный файл test.c загружается в директорию /tmp на сервере.
  2. Компиляция кода: Модуль command запускает процесс компиляции вашего кода на удалённом сервере.
  3. Скачивание выходного файла: Модуль fetch позволяет загрузить скомпилированный файл обратно на вашу локальную машину.
  4. Очистка: Используя модуль file, вы удаляете исходный и скомпилированный файлы на удалённом сервере для сохранения порядка.

Заключение

Использование Ansible для автоматизации процесса компиляции и получения выходных файлов позволяет значительно упростить взаимодействие с удалённым сервером. Этот подход не только ускоряет разработку, но и минимизирует вероятность ошибок, связанных с ручной передачей файлов. Следуя данному руководству, вы сможете эффективно управлять компиляцией кода на удалённом сервере и возвращать результаты на свою локальную машину без лишних хлопот.

Оцените материал
Добавить комментарий

Капча загружается...