Как написать простой скрипт Bash для автоматизации задач на VPS

В этой статье на примере Ubuntu/Debian разберём:

  • что такое Bash-скрипт и как он устроен;
  • как написать первый скрипт и запустить его;
  • как передавать аргументы и делать простую логику;
  • как запускать скрипт по расписанию через cron.

Что такое Bash-скрипт и где он живёт

Если вы уже используете SSH и вводите команды в терминале — вы половину пути к Bash-скриптам уже прошли. Скрипт — это:

  • обычный текстовый файл;

  • в первой строке у него указано, какой интерпретатор использовать (Bash);

  • ниже — команды, которые выполняются сверху вниз.

Чаще всего скрипты кладут в:

  • /usr/local/bin — для скриптов, которые должны быть доступны глобально;

  • ~/scripts — для личных скриптов конкретного пользователя.

В примерах ниже будем использовать каталог /usr/local/bin — он уже есть в $PATH и оттуда удобно запускать свои команды.

Первый скрипт на Bash: «Привет, VPS»

Сделаем простой скрипт, который выводит информацию о сервере: имя хоста, аптайм и загрузку диска.

1. Создаём файл скрипта

Открываем новый файл в nano:

sudo nano /usr/local/bin/vps-info.sh

Вставляем в него содержимое:

#!/usr/bin/env bash

echo "=== Информация о сервере ==="
echo "Хост: $(hostname)"
echo "Дата: $(date)"
echo
echo "Аптайм:"
uptime
echo
echo "Диск /:"
df -h /
Редактирование простого Bash-скрипта vps-info.sh в редакторе nano

Сохраняем файл: Ctrl + O, затем Enter, выходим: Ctrl + X.

2. Делаем скрипт исполняемым

По умолчанию файл — просто текст. Чтобы его можно было запускать как программу, нужно выдать права на исполнение:

sudo chmod +x /usr/local/bin/vps-info.sh

3. Запускаем скрипт

Теперь можно вызвать его просто по имени (каталог /usr/local/bin уже в PATH):

vps-info.sh

На экране увидите что-то вроде:

=== Информация о сервере ===
Хост: www
Дата: Mon Jan 19 13:10:05 MSK 2026

Аптайм:
 13:10:05 up 2 days,  3:42,  1 user,  load average: 0.08, 0.03, 0.00

Диск /:
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       7.8G  6.5G  1.0G  87% /
Запуск Bash-скрипта vps-info.sh в терминале

Важно: если при запуске видите «command not found», убедитесь, что файл лежит в /usr/local/bin и у него есть права на исполнение (chmod +x).

Скрипт с параметрами и простой логикой

Теперь усложним пример: сделаем скрипт, который по запросу чистит старые логи в указанной папке. Для демонстрации логика будет максимально простой.

1. Скрипт с аргументом

Создаём новый файл:

sudo nano /usr/local/bin/cleanup-logs.sh

Вставляем:

#!/usr/bin/env bash

# Простой скрипт для очистки старых логов
# Использование: cleanup-logs.sh /var/log/myproject

LOG_DIR="$1"

if [ -z "$LOG_DIR" ]; then
  echo "Укажите каталог с логами. Пример:"
  echo "  cleanup-logs.sh /var/log/myproject"
  exit 1
fi

if [ ! -d "$LOG_DIR" ]; then
  echo "Каталог ${LOG_DIR} не найден."
  exit 1
fi

echo "Очистка логов в каталоге: ${LOG_DIR}"
find "$LOG_DIR" -type f -name "*.log" -mtime +7 -print -delete

echo "Готово."

Делаем скрипт исполняемым:

sudo chmod +x /usr/local/bin/cleanup-logs.sh

Пример вызова:

cleanup-logs.sh /var/log/myproject

Что здесь происходит:

  • $1 — первый аргумент командной строки (путь к каталогу логов);

  • если аргумент не указан или каталога нет — выводим подсказку и выходим с кодом ошибки;

  • find ищет *.log старше 7 дней (-mtime +7) и удаляет их.

Совет: сначала можно удалить опцию -delete и посмотреть только список файлов, которые будут удалены — так безопаснее, особенно на боевых серверах.

Запуск скрипта по расписанию через cron

Автоматизация начинается там, где вы перестаёте запускать скрипт руками. Самый простой способ — cron.

1. Cron для root

Если скрипт работает с системными логами или требует прав root, удобнее повесить его в crontab суперпользователя:

sudo crontab -e

В самый низ добавляем строку, например, для ежедневной очистки логов в 03:15 ночи:

15 3 * * * /usr/local/bin/cleanup-logs.sh /var/log/myproject >/dev/null 2>&1

Здесь:

  • 15 3 * * * — время запуска (03:15 каждый день);

  • вызывается наш скрипт с нужным каталогом;

  • вывод отправляется в /dev/null, чтобы не засорять почту.

Добавление Bash-скрипта очистки логов в crontab

2. Cron для обычного пользователя

Если скрипт не требует прав root (работает в своём каталоге), можно использовать пользовательский cron:

crontab -e

И добавить строку без sudo и без явного указания пользователя.

Немного про отладку и хорошую привычку

Чтобы не тратить время на поиски странных ошибок, можно придерживаться нескольких простых правил:

  • запускать новый скрипт сначала руками и смотреть вывод;

  • по возможности логировать результат в файл: ... >> /var/log/my-scripts.log 2>&1;

  • не смешивать в одном скрипте всё подряд — лучше несколько простых скриптов, чем один «комбайн» на 300 строк.

Для отладки удобно временно добавлять:

set -x

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

Итоги

  • Разобрали, что Bash-скрипт — это обычный текстовый файл с командами и шебангом в первой строке.

  • Написали первый скрипт с выводом информации о VPS и сделали его исполняемым.

  • Сделали скрипт с параметром и простой логикой для очистки старых логов.

  • Подключили cron, чтобы запускать скрипты автоматически по расписанию.

Вывод: простой Bash-скрипт — это самый быстрый способ автоматизировать рутину на VPS: вместо десятка команд в терминале вы запускаете одну, а через cron и об этом забываете.

Оставить комментарий