Команда shutdown
Эта команда позволяет безопасно и технически «правильно» произвести перезапуск, остановку ОС или перевести её в однопользовательский режим. Для разных систем команда shutdown имеет различную спецификацию, касающуюся синтаксиса и опций, поэтому разумно рассмотреть её в общих чертах, затронув лишь некоторые особенности использования.
Поскольку, такие мероприятия как перезапуск и выключение часто затрагивают многих пользователей, системным администраторам необходимо иметь возможность предупреждать их об этих действиях заранее прежде чем они будут выполнены. Команда shutdown позволяет это сделать, добавляя пузу, во время которой пользователям отправляются сообщения о предстоящем событии (выключение или перезапуск). Отправка этих сообщений по-умолчанию повторяется через укорачивающиеся интервалы времени и содержат текст о характере предстоящего события, для которого также указывается оставшееся время. Администратор может задать произвольный текст сообщения, если это будет нужно в зависимости от ситуации. Естественно, после выполнения shutdown пользователи не смогут входить в систему, но всё это время они будут видеть информационное сообщение, данное через команду shutdown.
Характер выполняемого действия shutdown задаётся через параметры и таковыми могут быть:
- нормальный остановка;
- нормальный остановка с последующим автоматическим запуском (перезагрузка);
- переход в однопользовательский режим;
- некоторые другие сопутствующие действия (в зависимости от системы), например проверка устройств хранения командой fsck.
В последнем случае проверка fsck может быть принудительной, т. к. по-умолчанию в современных ОС данная проверка проводится автоматически при запуске только в случае некорректного демонтирования файловых систем.
В следующей таблице приведены основные опции shutdown для некоторых систем Linux:
Система | Путь | R | H | S | F |
Linux | /sbin/shutdown | -r | -h | — | -f |
Solaris | /usr/sbin/shutdown | -i6 | -i0 | -iS | — |
HP-UX | /etc/shutdown | -r | -h | — | |
AIX | /sbin/shutdown | -r | -h | -m | — |
Для данной системы используются следующие обозначения: R – перезапуск, H – нормальная остановка, S – продолжение работы в однопользовательском режиме, F – запретить проверку fsck (актуально только для SUSE и Red Hat).
Для того, чтобы остановить Linux в 8:30 (например для проведения регламентных работ по техническому обслуживанию серверов) с уведомлением об этом пользователей, следует выполнить следующую команду:
$ sudo shutdown -h 08:30 «Внимание! С 08:30 до 13:00 Проводятся регламентные работы. Приносим извинения за неудобства.». Если нужно задать относительное время для остановки/перезапуска:
Если нужно задать относительное время для остановки/перезапуска:
$ sudo shutdown -h +30 «Внимание! Проводятся регламентные работы.»
Что делать с сообщением *** System restart required *** в Ubuntu?
Сообщение не требует пояснений по большей части. Ваша система Linux считает, что система должна быть перезапущена. Обычно вы увидите это сообщение после установки обновлений ядра. Некоторые исправления безопасности вступают в силу только после перезагрузки системы.
Как узнать, было ли обновление ядра причиной запроса на перезагрузку системы? Есть способ это выяснить.
Вы можете проверить содержимое файла /var/run/reboot-required.pkgs:
В нашем случае перезапуск был запросом базового пакета образа Linux. Вы также можете увидеть что-то вроде linux-image-xxx-xx-generic. Это указывает на то, что недавнее обновление ядра Linux требует перезагрузки системы.
Это важный вопрос. Перезапуск равен простою. Службы и приложения, работающие на сервере, будут недоступны во время перезапуска, если у вас нет лучшего механизма, такого как балансировщик нагрузки. Представьте себе потерю трафика на ваш сайт или перебои в обслуживании из-за перезапуска.
Но не перезапуск вашей системы также может означать, что важные обновления не будут применены должным образом и ваш сервер будет уязвим.
Что вы должны сделать? Стоит ли перезагружать сервер или нет?
Одним из способов может быть просмотр последнего журнала изменений пакета, который запросил перезагрузку.
Список изменений покажет всю историю указанного пакета. Вам следует только взглянуть на последнюю запись в журнале изменений и посмотреть, отображает ли она срочность высокой, чрезвычайной или критической. Если это так, вы должны перезапустить сервер Ubuntu.
Если срочность низкая или средняя, вам решать, хотите ли вы перезагрузить сервер или нет. Вы также можете удалить файл /var/run/reboot-required, чтобы он не показывал вам *** System restart required *** при входе в систему. Это сообщение может вернуться в будущем, если новое обновление системы считает, что требуется перезагрузка системы.
Когда следует перезагрузить сервер?
Лучшая практика – перезапуск системы при минимальном времени активности. Если вы управляете своим сервером какое-то время, у вас должно быть представление о том, когда ваш сервер работает на минимальной нагрузке на сеть. Перезагрузка сервера обычно занимает меньше минуты.
Вам не нужно быть в сети при перезапуске сервера. Просто используйте команду shutdown в Linux и запланируйте перезагрузку. Тем не менее, рекомендуется отслеживать эти действия на предмет непреднамеренного поведения.
Как избежать перезагрузки даже для патчей безопасности
Мы понимаем, что вы не захотите перезагружать свою систему даже во время низкой активности. К счастью, материнская компания Ubuntu, Canonical, предоставляет способ справиться с этим.
С их службой исправлений в реальном времени вы можете устанавливать обновления ядра Linux без перезагрузки сервера. Эта услуга бесплатна для личного использования на трех установках Ubuntu. Вам нужно будет создать учетную запись Ubuntu One для использования сервиса livepatch.
Практический результат
Перезагрузка системы обычно требуется, когда установлено обновление ядра Linux. Вам решать, что вы хотите сделать, если увидите сообщение *** System restart required ***.
Если вы можете перезагрузить систему, вы должны это сделать. Если есть ограничения, перезапустите систему, чтобы установить исправления для критических или аварийных исправлений. Использование сервиса Canonical Livepatch также является хорошей идеей.
Мы надеемся, что вы узнали несколько новых вещей о системных исправлениях и проверке журналов изменений. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.
Дополнительные возможности
— список пакетов, которые запрещено обновлять подобным способом. Тут же нам в примере сразу предлагают это сделать для libc, а выше описан другой пример — с PostgreSQL. Но помните, что на другой чаше весов: откладывая критичные исправления, вы рискуете безопасностью.
— если последний процесс установки/обновления не смог завершиться по каким-либо причинам, вероятно, вам приходилось исправлять ситуацию вручную. То же самое делает и эта опция, т.е. вызывает
Обратите внимание, что здесь указана опция — она означает, что будут сохранены старые версии конфигов, если возникнут конфликты.
— выполнять обновления минимально возможными частями. Позволяет прервать обновление отправкой SIGUSR1 процессу unattended-upgrade
— устанавливать обновления перед выключением компьютера. Лично мне кажется плохой идеей, т.к. не хотелось бы получить труп после плановой перезагрузки сервера.
и — кому отправлять письма об обновлениях и/или проблемах с ними. Письма отправляются через стандартный MTA sendmail (используется переменная окружения ). К сожалению, только письма, а выполнять curl к какому-то API здесь нельзя.
— перезагружать автоматически после окончания установки, если есть файл . Сам файл появляется, например, после установки пакета ядра Linux, когда срабатывает правило . В общем, ещё одна опция из набора «грязного Гарри».
— если вы хотите сделать свои тёмные дела ночью, пока никто не видит… задаёт конкретное время автоматической перезагрузки.
— это уже из общего набора параметров apt. Ограничивает скорость загрузки обновлений, чтобы не забить канал.
Команды halt и reboot
Эти команды стоит рассмотреть в контексте того, что они хоть и могут использоваться независимо сами по себе, но, как правило вызываются всё той же командой shutdown.
При вызове halt выполняются все основные действия, необходимые для нормального выключения ОС. Так например, сначала выполняется завершение всех некритичных процессов, в журнал регистрации заносится сообщение о выключении, далее производится выполнение системного вызова sync и ожидание освобождения устройств хранения от операций записи. Затем останавливается работа системного ядра.
Одной из важных опций halt является ключ -n. Он запрещает использование системный вызов sync для того, чтобы ядро не восстанавливало «старые» образы корневого раздела, хранящиеся в его кеше. Другими словами, halt -n используется после того, как был восстановлен раздел при помощи fsck.
Команда reboot отличается от halt лишь тем, что производит перезапуск по-умолчанию. Однако её можно использовать для выполнения некоторых полезных действий перед перезагрузкой системы. Например, можно не отправлять сообщения о предстоящей перезагрузке (стоит заметить, что далеко не всегда это бывает полезным…) пользователям используя ключ —no-wall. Если необходимо просто внести запись о событии в файл /var/log/wtmp (этот файл регистрирует все события входа и выхода в ОС), то нужно воспользоваться ключом -w (или —wtmp-only), при этом перезагрузки не произойдёт. Для выполнения перезагрузки без внесения записей в файл /var/log/wtmp, существует ключ -d (или —no-wtmp). Также при помощи команды reboot возможно выполнять остановку системы и выключение машины, используя ключи —halt и -p (—poweroff) соответственно. Для принудительной и немедленной перезагрузки используется ключ -f (—force). В большинстве систем все ключи, описанные для команды reboot применяются и для команды halt с тем же значением.
Устранение неполадок в системе печати
Не всегда удается настроить принтер с первого раза и иногда настройка становится чрезвычайно сложной, убивающей веры в свои силы. Постараюсь описать некоторые шаги по устранению проблем с печатью:
- Постарайтесь проверить работоспособность принтера на другой ОС. Естественно, если он не заработает в другой ОС, то проблема скорее всего в аппаратной части.
- Проверьте все физические соединения. Питание, информационный провод. Проверьте включен ли принтер и имеется ли бумага в лотке, а так же нет ли сигнализации об ошибках на принтере.
- Если принтер подключается по USB, LPT, COM, то посмотрите выводы команд lsusb, dmesg на наличие записей о принтере. Если принтер с Ethernet-интерфейсом, проверьте связь с ним командой ping.
- Если все вышеперечисленные проверки завершились успехом — тщательно проверьте настройки CUPS.
- Проверьте в Веб-интерфейсе, не остановлена ли очередь печати принтера.
- Если в статусе принтера написано waiting for job copmlete, то что-то мешает CUPS очистить очередь печати принтера (например отсутствие физического соединения с принтером или нехватка прав доступа).
- Если при печати на бумаге выводится всякий мусор, то скорее всего выбраны неверные параметры/модель принтера.
- Так же, для поиска неисправности необходимо просмотреть логи принтера в каталоге /var/log/cups/
- Ну и как всегда, вам в помощь яндэкс и гугл.
Запуск, остановка и перезапуск служб в Debian 11 с помощью Systemd
Systemd – это пакет для управления службами и демонами Linux (последняя буква «d» связана с демонами Unix). Команда systemctl позволяет запускать, останавливать, перезапускать и проверять статус служб. Его цель – унифицировать конфигурацию и поведение для всех дистрибутивов Linux, заменяя старые системы инициализации Unix SystemV и BSD.
В этом разделе руководства показаны примеры выполнения действий, описанных в следующей таблице.
ДЕЙСТВИЕ | КОМАНДА |
---|---|
Проверить статус услуги | sudo systemctl status <имя_службы> |
Остановить службу | sudo systemctl stop <имя_службы> |
Запустить службу | sudo systemctl start <имя_службы> |
Перезапустить службу | sudo systemctl restart <имя_службы> |
Как показано в предыдущей таблице, синтаксис для проверки состояния службы с помощью Systemd следующий:
systemctl status <Имя службы>
Следовательно, чтобы проверить статус службы ssh, вы можете выполнить следующую команду.
sudo systemctl status ssh
Чтобы остановить службу, синтаксис аналогичен, просто замените параметр status на действие, которое вы хотите выполнить, в этом случае действие должно быть stop.
Например, чтобы остановить службу ssh, выполните команду ниже.
sudo systemctl stop ssh
Чтобы запустить службу, просто замените stop на start. Чтобы запустить службу ssh, запустите:
sudo systemctl start ssh
Чтобы перезапустить службу, вам нужно ввести параметр перезапуск. Следующая команда используется для перезапуска службы ssh.
sudo systemctl restart ssh
Вот так сервисы перезапускаются с помощью Systemd.
Вопросы, требующие внимания
6.1. Связь между RestartPreventExitStatus и Restart
После настройки RestartPreventExitStatus = Restart = не игнорируется полностью. Вместо этого Restart = игнорируется, когда статус выхода совпадает с RestartPreventExitStatus =. Если совпадений нет, что происходит в соответствии с Restart = (подробности см. В следующем расширении) раздел)
6.2. Что произойдет с дочерним процессом kill
Если systemd запускает не простой процесс, а ситуацию, когда дочерние процессы являются производными (например, выполнение сценария оболочки, несколько программ запускаются в сценарии оболочки), то при открытии другого окнаЧто будет происходить во время теста, сначала опубликуйте метод тестирования
ExecStart = / root / mem изменен на ExecStart = / root / mytest.sh
/root/mytest.sh содержимое
Результаты теста
-
Если убить PID основного процесса (убить без параметров), статус основного процесса будет
-
Если kill -9 PID основного процесса, состояние основного процесса будет
-
Если PID последнего дочернего процесса убит (kill не принимает параметры), systemd не считает сигнал полученным, а обрабатывает его в соответствии с кодом выхода последнего процесса. В это время статус основного процесса
-
Если kill -9 PID последнего дочернего процесса, статус основного процесса будет
Systemd: управление автозагрузкой служб в Linux
В большистве популярных современных популярных дистрибутивов Linux (CentOS 7, RHEL, Debian, Fedora и Ubuntu) в качестве демона автозагрузки вместо init.d используется systemd. Systemd – менеджер системы и служб Linux, используется для запуска других демонов и управления ими в процессе работы, использует unit-файлы из /etc/systemd/system (init.d использовал скрипты из каталога /etc/init.d/). Systemd позволяет распараллелить запуск служб в процессе загрузки ОС, тем самым ускоряя запуск.
Для управления system используется команда systemctl.
Для начала, после загрузки системы, мы проверим список юнитов, которые в данный момент добавлены в systemd:
Список unit-файлов можно получить командой:
Данная команда отобразит все доступные юнит-файлы (не зависимо от того, были они загружены в systemd после загрузки ОС или нет).
Чтобы вывести список активных сервисов и их состояние, выполните:
Следующая команда выведет список юнитов, которые загрузил или пытался загрузить systemd. Так как после запуска некоторые юниты могут стать неактивными, с помощью флага —all вы получите полный список.
UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ● exim.service not-found inactive dead exim.service firewalld.service loaded active running firewalld - dynamic firewall daemon getty@tty1.service loaded active running Getty on tty1 ● ip6tables.service not-found inactive dead ip6tables.service ● ipset.service not-found inactive dead ipset.service ● iptables.service not-found inactive dead iptables.service Bring up/down networking ● NetworkManager-wait-online.service not-found inactive dead
Как видим из списка, здесь отображаются даже сервисы, которые не были найдены на диске «not-found».
Использую данную команду, вы можете добавить и другие флаги, например:
- —state — используется для определения состояния демона Load, Active, Sub
- —type — позволяет фильтровать юниты по их типу.
Примеры:
— выведет список только активных юнитов
— выведет список юнитов, которые являются сервисом.
Добавление сервиса в systemd
Для управления сервисами в systemd используется особый синтаксис. После имени серверсв в конце нужно указывать .service. Например:
– команда добавит в автозагрузку веб-сервер nginx
Данная команда создаст символическую ссылку на копию файла, указанного в команде сервиса, в директории автозапуска systemd.
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service
Вывод этой команды показывает в какой директории был создан симлинк на файл сервиса.
Чтобы посмотреть добавлен тот или иной сервис в автозагрузку, можно проверить его статус:
При выводе нужно обратить внимание на строку:
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Значение enabled означает что данный сервис загружается автоматически (добавлен в автозагрузку). Если сервис не загружается автоматом, здесь буде указано disabled.
Удаление сервиса из systemd
Вы можете удалить сервис из автозагрузки, чтобы он не запускался после старта Linux (при этом сам сервис с сервера не удаляется). Чтобы удалить сервис из автозагрузки, выполните команду:
Например, чтобы удалить из автозагрузки nginx, выполните:
Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service
После выполнения команды, симлинк на файл сервиса будет удален из директории systemd. Можно проверить, есть ли юнит в автозагрузке:
Systemd: маскировка юнитов
В моей практике встречались «вредные» сервисы, которые после удаления их из автозагрузки, все равно там оставались и запускались после рестарта ОС. Чтобы решить этот вопрос, можно замаскировать сервис:
И после этого, он вообще не будет запускаться, ни вручную, ни после перезагрузки ОС:
Created symlink from /etc/systemd/system/nginx.service to /dev/null.
Redirecting to /bin/systemctl restart nginx.service Failed to restart nginx.service: Unit is masked.
Снять маску можно командой:
Removed symlink /etc/systemd/system/nginx.service.
Если после маскировки сервиса, вы проверите юнит-файлы, то увидите, что сервис помечен как замаскированный (состояние masked):
Таким нехитрым способом, можно избавить себя от удаления сервиса, даже если он не удаляется из автозагрузки systemd.
Автозапуска скриптов и сервисов с помощью rc.local
Для запуска различных скриптов при загрузке Linux чаще всего используется rc.local.
Но помимо скриптов, через rc.local так же можно и запускать сервисы, даже те, которые запускаются через systemd. Не могу ответить на вопрос, для чего использовать в таком случае rc.local, если есть systemd, но пару примеров я приведу.
Начнем с того, что файл /etc/rc.local должен быть исполняемым:
Rc.local должен быть добавлен в автозагрузку systemd:
И на примере того же nginx, мы можем добавить в rc.local команду запуска веб-сервера:
Но я редко использую rc.local для запуска сервисов. Чаще rc.local используется, когда нужно запустить скрипт, либо выполнить разово какую-то команду.
К примеру, я создал скрипт /root/test.sh который выполняет некоторые действия, и хочу запустить его сразу после запуска системы. Добавляем в файл rc.local строку:
Начиная с CentOS 7, разработчики указывают на то, что rc.local устаревший демон и осуществлять автозапуск скриптов или сервисов через него, это прошлый век. Но пока он работает, я пользуюсь им, так как он очень прост в эксплуатации.
Команда shutdown: корректный способ останова системы
Команда — самый безопасный и корректный способ остановить или перезагрузить систему либо вернуться в однопользовательский режим.
Можно дать команде указание делать паузу перед остановом системы. Во время ожидания команда посылает зарегистрированным пользователям через постепенно укорачивающиеся промежутки времени сообщения, предупреждая о приближающемся событии. По умолчанию в сообщениях говорится о том, что система заканчивает работу, и указывается время, оставшееся до момента останова. При желании администратор может добавить собственное короткое сообщение, в котором поясняется, почему система останавливается, и сколько примерно времени придется подождать, прежде чем снова можно будет войти в систему. После выполнения команды shutdown пользователи будут лишены возможности входа в систему, но они будут видеть сообщение, предусмотренное администратором.
С помощью команды можно указать, что должна сделать система после выполнения команды: остановиться () или перезагрузиться (). Можно также задать, должна ли после перезагрузки выполняться принудительная проверка дисков с помощью команды () или нет (). По умолчанию Linux автоматически пропускает эту проверку, если файловые системы были корректно демонтированы.
Следующая команда напоминает пользователям о запланированной процедуре сервисного обслуживания и отключает систему в 9:30 утра:
Можно также задать относительное время отключения. Например, приведенная ниже команда запустит процесс выключения через 15 минут: