Отчёт ЛР6
.docxМинистерство Цифрового Развития, Связи И Массовых
Коммуникаций Российской Федерации
Ордена Трудового Красного Знамени Федеральное
Государственное Бюджетное Образовательное Учреждение
Высшего Образования
«Московский Технический Университет Связи и Информатики» (МТУСИ)
Лабораторная работа №6
«Скрипты и планирование
выполнения команд»
Выполнил: Студент
группы БИН2406 Петров
Вячеслав Андреевич Проверил: Ассистент
кафедры ССиСК Рогач
Иван Сергеевич
Оглавление
Цель работы 3
Выполнение работы 4
Задание 1 4
Задание 2 5
Задание 3 6
Задание 4 6
Контрольные вопросы 7
В чем разница между использованием двойных и одиночных кавычек при задании строк? 7
Как запланировать выполнение скрипта каждые 15 минут, но только в рабочие дни? 7
Объясните, почему команды, работающие с пользовательским окружением, могут не работать через cron? 7
Как в скрипте реализовать обработку ошибок выполнения команды? 8
Какие риски связаны с автоматической перезагрузкой системы через скрипт? 8
Вывод 8
Цель работы
Ознакомиться с основами написания и выполнения Shell-скриптов. Изучить методы автоматизации задач с помощью планировщика cron, его настройку и использование для периодического выполнения команд в системе Linux.
Краткая теория
Все нижеприведенные команды справедливы для Ubuntu. В зависимости от дистрибутива команды могут видоизменяться.
at: Утилита предназначена для выполнения задач или команд в указанное время.
В Ubuntu Shell-скрипты можно выполнять различными способами. Каждый из них имеет особенности, связанные с контекстом, правами доступа и использованием интерпретатора. Рассмотрим их подробно:
Выполнение через явное указание интерпретатора
Этот способ используется, когда необходимо указать, какой интерпретатор следует использовать для выполнения скрипта.
Пример: bash script.sh
Выполнение с помощью команды ./
Этот метод используется для выполнения скриптов как самостоятельных программ, если у скрипта есть разрешение на выполнение.
Пример: ./script.sh
Выполнение с использованием sudo
Если скрипт требует привилегий суперпользователя, его необходимо запускать с помощью sudo. Однако, метод выполнения через sudo
./script.sh может быть проблематичным из-за особенностей обработки переменных среды. Рекомендуется использовать явное указание интерпретатора.
Пример: sudo bash script.sh
Выполнение через графические оболочки или планировщики
Скрипты могут быть выполнены через другие средства, такие как планировщики (например, cron.sh) или графические оболочки. В таких случаях важно указать полный путь к скрипту и интерпретатору.
Выполнение работы
Задание 1
Задание 2
Задание 3
Задание 4
Контрольные вопросы
В чем разница между использованием двойных и одиночных кавычек при задании строк?
В Bash одиночные кавычки (' ') сохраняют содержимое строки буквально: переменные ($VAR), подстановки команд и специальные символы не интерпретируются. Например, echo 'Сегодня $DATE' выведет текст как есть. Двойные кавычки (" ") позволяют расширять переменные и подстановки команд, но экранируют большинство специальных символов. Пример: echo "Сегодня $DATE" подставит актуальную дату. Без кавычек строка разбивается по пробелам, что может вызвать ошибки. Одиночные — для статичного текста, двойные — для динамического с подстановками. Это важно для безопасности и корректной работы скриптов.
Как запланировать выполнение скрипта каждые 15 минут, но только в рабочие дни?
В crontab (команда crontab -e) используйте формат: минуты часы * * день_недели команда. Для запуска каждые 15 минут только по будням (понедельник–пятница): */15 * * * 1-5 /полный/путь/к/скрипту.sh. Здесь */15 означает 0,15,30,45 минуты каждого часа, 1-5 — дни недели (1=понедельник). Скрипт должен быть исполняемым (chmod +x). Полный путь обязателен, так как cron имеет ограниченное окружение. Это обеспечит выполнение с 00:00 до 23:45 в рабочие дни.
Объясните, почему команды, работающие с пользовательским окружением, могут не работать через cron?
Cron запускает задачи в минимальной неинтерактивной среде без загрузки ~/.bashrc, ~/.profile и других пользовательских файлов. Переменные окружения (PATH, алиасы, функции) отсутствуют или ограничены системными значениями. Команды, зависящие от пользовательских настроек, не находят пути или не распознают алиасы. Решение: в скрипте явно source ~/.bashrc, указывать полный путь к командам или export нужных переменных. Для диагностики добавьте env > /tmp/cron_env в задачу и сравните с env в терминале.
Как в скрипте реализовать обработку ошибок выполнения команды?
В Bash проверяйте код возврата команды ($?): command; if [ $? -ne 0 ]; then echo "Ошибка!"; exit 1; fi. Или используйте &&/||: command && echo "OK" || { echo "Ошибка"; exit 1; }. Добавьте set -e в начало скрипта для автоматического выхода при ошибке. trap 'echo "Ошибка на строке $LINENO"; cleanup' ERR ловит ошибки глобально. Перенаправляйте ошибки: command 2>/tmp/error.log. Логируйте и очищайте ресурсы в обработчике. Это повышает надёжность скриптов.
Какие риски связаны с автоматической перезагрузкой системы через скрипт?
Автоматический reboot (sudo reboot в cron) может привести к потере несохранённых данных и повреждению файловых систем. Прерываются запущенные процессы, сервисы и пользовательские сессии, вызывая downtime. Ошибка в условии (например, неверный расчёт uptime) спровоцирует бесконечные перезагрузки. На серверах — потеря доступности для клиентов. Проблемы с аппаратным обеспечением или автозапуском сервисов после ребута. Для минимизации: добавьте уведомления, задержки, логирование и тестирование в виртуальной среде. Лучше использовать shutdown -r с предупреждением.
Вывод
В ходе работы освоены основы shell-скриптов: создание архивов (tar), очистка файлов (find), мониторинг uptime и диска (df). Реализованы скрипты для резервного копирования, очистки временных файлов, проверки времени работы системы и свободного места.
Настроены задачи в cron для ежедневного запуска. Учтены особенности окружения cron (ограниченный PATH, отсутствие ~/.bashrc). Изучены кавычки, обработка ошибок (set -e, trap) и риски авто-перезагрузки.
Работа выполнена полностью, навыки автоматизации рутинных задач получены.
Москва 2025
