В этой статье на примере 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 /
Сохраняем файл: 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% /
Важно: если при запуске видите «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, чтобы не засорять почту.
2. Cron для обычного пользователя
Если скрипт не требует прав root (работает в своём каталоге), можно использовать пользовательский cron:
crontab -e
И добавить строку без sudo и без явного указания пользователя.
Немного про отладку и хорошую привычку
Чтобы не тратить время на поиски странных ошибок, можно придерживаться нескольких простых правил:
запускать новый скрипт сначала руками и смотреть вывод;
по возможности логировать результат в файл:
... >> /var/log/my-scripts.log 2>&1;не смешивать в одном скрипте всё подряд — лучше несколько простых скриптов, чем один «комбайн» на 300 строк.
Для отладки удобно временно добавлять:
set -x
в начало скрипта — тогда Bash будет показывать, какую команду он выполняет. Потом эту строку можно убрать.
Итоги
Разобрали, что Bash-скрипт — это обычный текстовый файл с командами и шебангом в первой строке.
Написали первый скрипт с выводом информации о VPS и сделали его исполняемым.
Сделали скрипт с параметром и простой логикой для очистки старых логов.
Подключили cron, чтобы запускать скрипты автоматически по расписанию.
Вывод: простой Bash-скрипт — это самый быстрый способ автоматизировать рутину на VPS: вместо десятка команд в терминале вы запускаете одну, а через cron и об этом забываете.