Вопрос или проблема
У нас есть мощный сервер для компиляции любого кода. По некоторым причинам мне в общем не разрешают копировать мои файлы на сервер, и когда я могу, я могу использовать только /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
Объяснение процесса
- Загрузка исходного файла: Используя модуль
copy
, ваш локальный файлtest.c
загружается в директорию/tmp
на сервере. - Компиляция кода: Модуль
command
запускает процесс компиляции вашего кода на удалённом сервере. - Скачивание выходного файла: Модуль
fetch
позволяет загрузить скомпилированный файл обратно на вашу локальную машину. - Очистка: Используя модуль
file
, вы удаляете исходный и скомпилированный файлы на удалённом сервере для сохранения порядка.
Заключение
Использование Ansible для автоматизации процесса компиляции и получения выходных файлов позволяет значительно упростить взаимодействие с удалённым сервером. Этот подход не только ускоряет разработку, но и минимизирует вероятность ошибок, связанных с ручной передачей файлов. Следуя данному руководству, вы сможете эффективно управлять компиляцией кода на удалённом сервере и возвращать результаты на свою локальную машину без лишних хлопот.