VibeCoderzVibeCoderz
Все статьи
Промпты2026/06/179 мин чтения

Написать Bash-скрипт: готовые шаблоны и промпты для автоматизации сервера

В статье показано, как быстро создавать Bash‑скрипты через AI‑платформы Cursor и Windsurf и предоставляет пять готовых шаблонов для типичных задач: бэкап, очистка логов, деплой, мониторинг CPU и рестарт‑сервисов.

Содержание (11)+

Обновлено: октябрь 2026

Bash-скрипт — это текстовый файл с командами, которые сервер выполняет последовательно. Написать его можно через Cursor или Windsurf за несколько минут: описываешь задачу по-русски, AI генерирует готовый .sh-файл, ты меняешь переменные под свой сервер и запускаешь chmod +x. Ниже — 5 шаблонов для реальных задач и промпты под каждый.


В статье: почему bash остаётся стандартом автоматизации Linux в 2026, как писать bash-скрипты через Cursor и Windsurf, 5 готовых шаблонов (бэкап, очистка логов, деплой через rsync/SSH, мониторинг CPU, cron-рестарт сервисов) с объяснением каждого шага, и промпты под каждую задачу. Плюс глоссарий для тех, кто видит bash впервые.


Почему bash-скрипты в 2026 не потеряли смысл?

Bash работает на любом Linux без дополнительных зависимостей. Docker, облака, VPS — bash есть везде, и это не изменится.

Каждый раз, когда нужно повторить одну и ту же серию команд — запустить деплой, почистить логи, проверить диск — можно делать это руками. Или один раз написать скрипт и забыть. Bash — это буквально duct tape для Linux, как формулируют в сообществе devops: берёшь несколько утилит, соединяешь пайпами, добавляешь условие if, и задача автоматизирована.

Python, Node, Go тоже умеют автоматизировать. Но у них есть зависимости, версии, виртуальные окружения. У bash — нет. Файл скрипта, права на выполнение, и всё. Запустится на Ubuntu 20.04, 22.04, 24.04 и на Rocky Linux без единой установки.

Кроме того, bash нативно встраивается в cron, systemd, CI/CD пайплайны. Это язык, на котором разговаривают серверы.

Изображение

Как написать bash-скрипт через Cursor или Windsurf?

Описываешь задачу в чате AI-ассистента на русском → получаешь готовый .sh-файл → меняешь пути под себя → запускаешь. Структура одна для Cursor и Windsurf.

Базовая структура любого bash-скрипта:

#!/bin/bash
# Это shebang — указывает, каким интерпретатором запускать файл

# Переменные (меняй под себя)
SOURCE_DIR="/var/www"
BACKUP_DIR="/backups"

# Команды
echo "Начинаем архивацию..."
tar -czf "$BACKUP_DIR/backup-$(date +%Y%m%d).tar.gz" "$SOURCE_DIR"
echo "Готово"

Первая строка #!/bin/bash — обязательна. Без неё система не поймёт, что это bash-скрипт. Она называется shebang. Чтобы узнать путь к bash на своём сервере, запусти which bash.

После создания файла нужна одна команда:

chmod +x имя-скрипта.sh

Без неё Linux видит файл как текст, а не как программу.

Изображение

Шаблон 1. Резервное копирование директории

Архивирует папку в tar.gz с датой в имени и удаляет бэкапы старше 7 дней. Ставится в cron на ночное время.

Самая частая задача. Потерять данные из-за отсутствия бэкапов — больно. Этот скрипт делает снимок нужной директории каждую ночь и сам удаляет старые архивы, чтобы диск не переполнился.

#!/bin/bash

# === НАСТРОЙКИ (меняй под себя) ===
SOURCE_DIR="/var/www/myapp"
BACKUP_DIR="/backups"
KEEP_DAYS=7
LOG_FILE="/var/log/backup.log"

# === СКРИПТ (не трогай) ===
DATE=$(date +%Y-%m-%d_%H-%M)
FILENAME="backup-${DATE}.tar.gz"

mkdir -p "$BACKUP_DIR"

echo "[$DATE] Начинаем бэкап $SOURCE_DIR" >> "$LOG_FILE"

tar -czf "$BACKUP_DIR/$FILENAME" "$SOURCE_DIR" 2>> "$LOG_FILE"

if [ $? -eq 0 ]; then
  echo "[$DATE] Бэкап создан: $FILENAME" >> "$LOG_FILE"
else
  echo "[$DATE] ОШИБКА при создании бэкапа" >> "$LOG_FILE"
  exit 1
fi

# Удаляем старые бэкапы
find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +$KEEP_DAYS -delete
echo "[$DATE] Бэкапы старше $KEEP_DAYS дней удалены" >> "$LOG_FILE"

Промпт для Cursor/Windsurf:

Напиши bash-скрипт для Ubuntu 22.04. Задача: архивировать директорию /var/www/myapp в /backups с датой и временем в имени файла формата backup-YYYY-MM-DD_HH-MM.tar.gz. После создания архива проверить exit code — если ошибка, записать в лог и выйти с кодом 1. Удалить архивы старше 7 дней из /backups. Все действия логировать в /var/log/backup.log. Вынести пути и количество дней хранения как переменные в начало файла.

Добавить в cron (crontab -e):

0 3 * * * /home/user/scripts/backup.sh

Это запуск каждую ночь в 03:00. $? в скрипте — это exit code предыдущей команды: 0 означает успех, любое другое число — ошибку.

Изображение

Шаблон 2. Очистка логов

Находит лог-файлы старше N дней и удаляет. Незаменим для серверов с большим количеством сервисов.

Логи растут быстро. Nginx, PHP, приложение — через месяц /var/log легко занимает несколько гигабайт. Этот скрипт зачищает хвосты.

#!/bin/bash

# === НАСТРОЙКИ ===
LOG_DIRS=("/var/log/nginx" "/var/log/php" "/var/log/myapp")
KEEP_DAYS=14
REPORT_FILE="/var/log/cleanup-report.log"

# === СКРИПТ ===
DATE=$(date +%Y-%m-%d_%H-%M)
TOTAL_FREED=0

echo "[$DATE] Начинаем очистку логов" >> "$REPORT_FILE"

for DIR in "${LOG_DIRS[@]}"; do
  if [ -d "$DIR" ]; then
    # Считаем размер до удаления
    SIZE_BEFORE=$(du -sh "$DIR" 2>/dev/null | cut -f1)

    # Удаляем старые .log файлы
    find "$DIR" -name "*.log" -mtime +$KEEP_DAYS -delete
    find "$DIR" -name "*.log.gz" -mtime +$KEEP_DAYS -delete

    SIZE_AFTER=$(du -sh "$DIR" 2>/dev/null | cut -f1)
    echo "[$DATE] $DIR: до=$SIZE_BEFORE, после=$SIZE_AFTER" >> "$REPORT_FILE"
  else
    echo "[$DATE] ПРЕДУПРЕЖДЕНИЕ: $DIR не существует" >> "$REPORT_FILE"
  fi
done

echo "[$DATE] Очистка завершена" >> "$REPORT_FILE"

Промпт для Cursor/Windsurf:

Напиши bash-скрипт очистки логов для Linux. Задача: обходить список директорий (переменная-массив в начале файла), в каждой удалять файлы *.log и *.log.gz старше 14 дней. До и после удаления замерять размер директории через du -sh и писать в лог-файл. Если директория не существует — писать предупреждение в лог, не падать с ошибкой. Пути, расширения и срок хранения вынести как переменные.
Изображение

Шаблон 3. Деплой через rsync и SSH

Синхронизирует файлы с удалённого сервера одной командой. Работает как упрощённый CI/CD для небольших проектов.

Самый частый сценарий у вайбкодеров: собрал проект локально, надо закинуть на сервер. FTP — прошлый век. rsync через SSH — быстро, безопасно, передаёт только изменённые файлы.

#!/bin/bash

# === НАСТРОЙКИ ===
LOCAL_DIR="/home/user/myproject/dist/"
REMOTE_USER="deploy"
REMOTE_HOST="123.45.67.89"
REMOTE_DIR="/var/www/myapp/"
SSH_KEY="$HOME/.ssh/deploy_key"
EXCLUDE_FILE=".rsync-exclude"   # файл со списком исключений (опционально)

# === ПРОВЕРКИ ===
if [ ! -d "$LOCAL_DIR" ]; then
  echo "ОШИБКА: Локальная директория $LOCAL_DIR не существует"
  exit 1
fi

if [ ! -f "$SSH_KEY" ]; then
  echo "ОШИБКА: SSH-ключ $SSH_KEY не найден"
  exit 1
fi

# === ДЕПЛОЙ ===
echo "Начинаем деплой на $REMOTE_HOST..."

rsync -avz --delete \
  -e "ssh -i $SSH_KEY" \
  --exclude='.git' \
  --exclude='node_modules' \
  --exclude='.env' \
  "$LOCAL_DIR" \
  "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"

if [ $? -eq 0 ]; then
  echo "Деплой успешен: $(date)"

  # Опционально: перезапускаем сервис после деплоя
  ssh -i "$SSH_KEY" "$REMOTE_USER@$REMOTE_HOST" "sudo systemctl restart myapp"
else
  echo "ОШИБКА деплоя"
  exit 1
fi

Промпт для Cursor/Windsurf:

Напиши bash-скрипт деплоя для Linux. rsync синхронизирует локальную папку /home/user/myproject/dist/ на удалённый сервер через SSH с ключом ~/.ssh/deploy_key. Исключить .git, node_modules, .env. После успешного rsync выполнить на удалённом сервере sudo systemctl restart myapp через SSH. Перед стартом проверить существование локальной директории и SSH-ключа, при ошибке — exit 1. Все настройки (хост, пользователь, пути, ключ) вынести в переменные в начале файла.
Максим: «Ребят, это работает. Мы деплоим GoBanana примерно по такой же схеме — rsync плюс SSH-ключ, без никаких GitHub Actions для мелких апдейтов. Описал задачу в Cursor, получил скрипт, поправил три переменные. На всё ушло 20 минут.»
Изображение

Шаблон 4. Мониторинг CPU и отправка алерта

Проверяет загрузку CPU каждые N минут. Если превышает порог — отправляет уведомление через curl на webhook (Telegram, Slack, Discord).

Сервер завис, а ты узнал об этом от клиента — неприятно. Этот скрипт мониторит нагрузку и сообщает раньше, чем всё упадёт.

#!/bin/bash

# === НАСТРОЙКИ ===
CPU_THRESHOLD=80           # процент загрузки для алерта
WEBHOOK_URL="https://api.telegram.org/bot{TOKEN}/sendMessage"
CHAT_ID="123456789"
CHECK_INTERVAL=60          # секунды между проверками
HOSTNAME=$(hostname)

# === ФУНКЦИЯ АЛЕРТА ===
send_alert() {
  local MESSAGE="$1"
  curl -s -X POST "$WEBHOOK_URL" \
    -d "chat_id=$CHAT_ID" \
    -d "text=$MESSAGE" > /dev/null 2>&1
}

# === МОНИТОРИНГ ===
echo "Мониторинг CPU запущен. Порог: $CPU_THRESHOLD%"

while true; do
  # Получаем среднюю загрузку CPU за последние 5 минут
  CPU_LOAD=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'.' -f1)

  if [ "$CPU_LOAD" -gt "$CPU_THRESHOLD" ] 2>/dev/null; then
    TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
    MESSAGE="[АЛЕРТ] $HOSTNAME: загрузка CPU = ${CPU_LOAD}% (порог ${CPU_THRESHOLD}%) в $TIMESTAMP"
    echo "$MESSAGE"
    send_alert "$MESSAGE"
  fi

  sleep "$CHECK_INTERVAL"
done

Промпт для Cursor/Windsurf:

Напиши bash-скрипт мониторинга CPU для Ubuntu. Каждые 60 секунд проверяет загрузку CPU через top. Если загрузка превышает порог (переменная CPU_THRESHOLD, по умолчанию 80%), отправляет POST-запрос через curl на Telegram Webhook с сообщением: hostname, текущий процент CPU, дата и время. Переменные для настройки: URL вебхука, chat_id, порог, интервал проверки. Скрипт работает в бесконечном цикле while true.

Шаблон 5. Автоматический рестарт сервиса через cron

Проверяет статус сервиса и перезапускает его, если он упал. Простейшая защита от аварийных остановок.

#!/bin/bash

# === НАСТРОЙКИ ===
SERVICE_NAME="nginx"          # имя systemd-сервиса
LOG_FILE="/var/log/service-watchdog.log"
NOTIFY_WEBHOOK=""             # опционально: webhook для алертов

# === ПРОВЕРКА ===
DATE=$(date "+%Y-%m-%d %H:%M:%S")

if ! systemctl is-active --quiet "$SERVICE_NAME"; then
  echo "[$DATE] ВНИМАНИЕ: $SERVICE_NAME не работает. Перезапускаем..." >> "$LOG_FILE"

  systemctl restart "$SERVICE_NAME"
  sleep 3

  if systemctl is-active --quiet "$SERVICE_NAME"; then
    echo "[$DATE] $SERVICE_NAME успешно перезапущен" >> "$LOG_FILE"

    if [ -n "$NOTIFY_WEBHOOK" ]; then
      curl -s -X POST "$NOTIFY_WEBHOOK" \
        -d "text=[$SERVICE_NAME] Сервис был упавшим и перезапущен в $DATE" > /dev/null 2>&1
    fi
  else
    echo "[$DATE] ОШИБКА: не удалось перезапустить $SERVICE_NAME" >> "$LOG_FILE"
  fi
else
  echo "[$DATE] $SERVICE_NAME работает нормально" >> "$LOG_FILE"
fi

Промпт для Cursor/Windsurf:

Напиши bash-скрипт watchdog для systemd-сервиса на Linux. Проверяет через systemctl is-active, запущен ли сервис (имя сервиса — переменная SERVICE_NAME). Если нет — перезапускает через systemctl restart, ждёт 3 секунды, снова проверяет. Если перезапуск удался — пишет в лог. Если нет — пишет ошибку в лог. Опционально отправлять уведомление через curl на webhook, если переменная NOTIFY_WEBHOOK не пустая. Весь ход работы логировать в /var/log/service-watchdog.log.

Добавить в cron каждые 5 минут:

*/5 * * * * /home/user/scripts/watchdog.sh
Изображение

Как добавить скрипт в cron?

cron запускает скрипты по расписанию без вашего участия. Нужна одна строка в crontab.

Откройте редактор crontab:

crontab -e

Синтаксис строки:

МИНУТЫ ЧАСЫ ДЕНЬ_МЕСЯЦА МЕСЯЦ ДЕНЬ_НЕДЕЛИ /путь/к/скрипту.sh >> /лог.log 2>&1
Пример строкиЧто делает
0 3 * * *Каждый день в 03:00
*/5 * * * *Каждые 5 минут
0 0 * * 1Каждый понедельник в полночь
30 2 1 * *Первого числа каждого месяца в 02:30
@rebootПри каждом перезагрузке сервера

>> /var/log/script.log 2>&1 после пути к скрипту — это перенаправление вывода в лог-файл. >> добавляет в конец (не перезаписывает), 2>&1 туда же пишет ошибки.

Проверить, что задача добавлена:

crontab -l

Промпты для Cursor и Windsurf: как формулировать задачи по bash?

Чем конкретнее задача, тем лучше результат. AI не угадывает — он генерирует именно то, что описано.

Структура хорошего промпта для bash-скрипта:

  1. ОС и дистрибутив (Ubuntu 22.04, Rocky Linux 9)
  2. Что нужно сделать (конкретное действие)
  3. Откуда берём данные и куда пишем
  4. Что делать при ошибке
  5. Нужен ли cron или это разовый скрипт

Слабый промпт: «Напиши скрипт бэкапа»

Сильный промпт: «Напиши bash-скрипт для Ubuntu 22.04. Архивировать /var/www/myapp в /backups как tar.gz с датой YYYY-MM-DD в имени. Проверить exit code после tar, если ошибка — записать в /var/log/backup.log и выйти с кодом 1. Удалять архивы старше 7 дней. Пути и срок хранения — переменные в начале файла»

Три рабочих шаблона промптов:

Для задач мониторинга:

Напиши bash-скрипт для [ОС]. Каждые [N] секунд/минут проверяет [что именно — размер диска / загрузку CPU / доступность URL]. Если значение превышает [порог] — [действие: пишет в лог / отправляет curl на webhook / перезапускает сервис]. Скрипт в бесконечном цикле while true. Переменные: [порог], [интервал], [URL webhook], [путь к логу].

Для задач деплоя:

Напиши bash-скрипт деплоя. rsync синхронизирует [локальная папка] на сервер [IP] под пользователем [user] через SSH-ключ [путь к ключу]. Исключить [список папок и файлов]. После успешного rsync — выполнить на сервере [команда]. При ошибке на любом шаге — exit 1. Переменные: [IP, пользователь, пути, SSH-ключ].

Для задач очистки:

Напиши bash-скрипт очистки для Linux. Обходить список директорий [массив]. В каждой удалять файлы [маска] старше [N] дней через find -mtime. До и после замерять размер через du -sh и писать в лог. Если директория не существует — предупреждение в лог, не выходить с ошибкой.
Изображение

Какой инструмент выбрать для написания bash-скриптов?

ИнструментПлюсыМинусыКогда выбирать
CursorМногофайловые правки, хорошо понимает контекст проектаДороже Windsurf на длинных итерацияхЕсть несколько взаимосвязанных скриптов
WindsurfЭкономичнее по токенам, Cascade хорош на длинных задачахЧуть медленнее на автодополненииРазовые задачи, экономия
Claude CodeПрямо в терминале, не нужен GUIНет визуальной IDEЧисто серверные задачи, есть SSH-доступ
Текстовый редактор + ChatGPTБесплатноНет контекста проекта, каждый раз зановоРазовый простой скрипт

Для вайбкодера без опыта в bash — рекомендуем Cursor или Windsurf. Они видят файловую структуру проекта и могут сами предложить, куда положить скрипт и как его вызывать.

Изображение

FAQ

Нужно ли знать программирование чтобы написать bash-скрипт?

Базовые задачи — нет. Бэкап, очистку логов, деплой через rsync можно написать через AI-ассистент (Cursor, Windsurf) без знания Bash. Нужно только понять структуру: shebang, переменные, chmod +x. Около 80% рутинных серверных задач решаются парой десятков строк кода, которые AI генерирует за секунды по вашему описанию на русском языке.

Как запустить bash-скрипт автоматически по расписанию?

Через cron. Откройте crontab -e, добавьте строку с расписанием. Для запуска каждую ночь в 03:00: 0 3 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1. Символы >> перенаправляют вывод в лог-файл, 2>&1 добавляет туда ещё и ошибки.

Как написать bash-скрипт через Cursor или Windsurf?

Создайте файл backup.sh в Cursor или Windsurf, откройте Chat или Cascade и опишите задачу конкретно: ОС, что делает, откуда берёт данные, куда пишет, что делать при ошибке. AI напишет весь код. Останется добавить свои переменные (путь, сервер, SSH-ключ) и запустить chmod +x.

Какой редактор лучше для написания bash-скриптов через AI?

Cursor и Windsurf одинаково хорошо справляются с bash-задачами. Cursor удобнее для многофайловых проектов. Windsurf — чуть экономичнее по токенам на длинных итерациях. Claude Code в терминале быстрее всего для чисто серверных задач: описал задачу → получил скрипт → запустил, не выходя из терминала.

Как проверить что bash-скрипт работает правильно?

Три шага. Первый: bash -n скрипт.sh — проверяет синтаксис без выполнения. Второй: bash -x скрипт.sh — режим отладки, каждая команда выводится перед выполнением. Третий: тест на безопасных данных, не на продакшне. Для деплой-скриптов добавь echo перед финальной командой, чтобы сначала увидеть что именно будет выполнено.

Как передать переменные в bash-скрипт?

Два способа. Через позиционные аргументы: ./backup.sh /var/www /backups — внутри скрипта они $1 и $2. Через переменные окружения: export BACKUP_DIR=/backups && ./backup.sh — внутри читается как $BACKUP_DIR. Для конфигурируемых скриптов удобнее вынести переменные в начало файла.

Что делает chmod +x и зачем он нужен?

Команда chmod +x файл.sh добавляет право на выполнение. Без неё Linux видит файл как обычный текст. После chmod +x можно запускать скрипт напрямую: ./backup.sh. Для cron-задач и системных скриптов chmod +x обязателен.


Если задача сложнее — несколько скриптов, взаимодействие с API, автоматизация деплоя всего стека — смотри каталог AI-инструментов на VibeCoderz. Там же обзоры Cursor, Windsurf и Claude Code с конкретными сценариями использования.

Если хочешь разобраться с автоматизацией под свой проект — запишись на консультацию к Максиму. Он разберет задачу и покажет, как это решается через вайбкодинг за один созвон.


Обновлено: октябрь 2026 | Проверено на Ubuntu 22.04 и Rocky Linux 9

Автор

Елисавета Наговицына

Предприниматель · Контент-маркетолог · SEO-стратег · AI-продуктолог

2026/06/17

400 000+ органических переходов за 3 месяца. Со-основатель GoBanana (231K пользователей, 12+ млн ₽ без рекламы) и NeuroScribe (65K пользователей). SEO/GEO-стратегии для AI-поисковиков, 1 700+ единиц контента, 17+ реализованных стратегий.

Об авторе →
All Posts

Инструменты, упомянутые в статье

Читать далее

📄 Статья

Промпт для агента перед стартом проекта вместо сделай красиво

Хороший промпт для старта проекта не описывает продукт. Он заставляет агента сначала пересказать задачу, задать вопросы и показать план, и только потом писать код. Один такой промпт экономит час объяснений и десяток переделок. Ниже разберем, из чего…

2026/07/138 мин
📄 Статья

v0 от Vercel: как генерировать React-компоненты по описанию

С помощью v0 от Vercel можно быстро создать полноценный React‑компонент из простого описания: промпт на любом языке генерирует код с Tailwind и shadcn/ui, а бесплатный тариф даёт 5 $ кредитов в месяц. В статье показан пошаговый пример, сравнение с конкурентами и детали цен.

2026/07/077 мин
📄 Статья

Telegram-бот для бизнеса 2026 стек PRD-промпт и запуск за вечер в Windsurf

Создай Telegram‑бота за один вечер – без кода и агентств – с Python, aiogram 3, Supabase, Claude Sonnet 4.6 и Railway, и тратой всего 500 руб/мес. Это быстрый, экономичный способ автоматизировать заявки, FAQ и лид‑прогрев.

2026/06/2412 мин
📄 Статья

Промпт PRD для Telegram-бота в Windsurf и Cursor (2026)

Структурированный PRD‑промпт из 7 блоков позволяет за один раз создать Telegram‑бота с FSM‑логикой, базой и интеграциями, используя Windsurf или Cursor.

2026/06/2411 мин
📄 Статья

Создать CRM через вайбкодинг: промпт, стек и что получится за один вечер

Создай простую CRM за один вечер: таблица клиентов, канбан, фильтрация и история звонков, используя готовый промпт и стек Next.js + Supabase.

2026/06/247 мин
📄 Статья

Как написать скрипт: правильный промпт для Cursor чтобы получить рабочий код с первого раза

Получите рабочий скрипт с первого запроса, если в промпт включите язык, задачу, данные, формат вывода и обработку ошибок – так AI точно сгенерирует нужный код.

2026/06/188 мин