Я должен перезапустить после обновления pacman?

Для серьезной серверной среды, ища опцию без стоимости, CentOS является определенно способом пойти.

Это тарифицировано как "бесплатная" версия RHEL (Red Hat Enterprise Linux) и является в значительной степени той же операционной системой с другим брендингом.

17
12.05.2013, 14:52
3 ответа

Если существуют обновления ядра, glibc или systemd, можно хотеть перезапустить так обновленные версии, используются. Если у Вас есть, скажем, обновления Вашей настольной среды, простой выход из системы/вход в систему достаточно.

10
27.01.2020, 19:47
[1129170] Лучший способ - найти, какие программы/сервисы используют старые библиотеки и перезапустить их. А этого можно добиться, перечислив все используемые файлы с помощью 'lsof' и найдя те, которые имеют тип 'DEL'. DEL означает, что имя файла было удалено из файловой системы, но все равно застряло в памяти, потому что кто-то его использует. Вот полная командная строка:

11
27.01.2020, 19:47

Единственная обязательная причина для перезагрузки - новое ядро ​​(и вы можете выполнить мягкую перезагрузку с помощью kexec). См. https://wiki.archlinux.org/index.php/Kexec для подробностей, вкратце:

  • загрузите новое ядро, initramfs и укажите командную строку загрузки

     kexec -l / boot / new-kernel --initrd = / boot / new-initramfs --reuse-cmdline 
     
  • вызвать kexec (используйте systemctl для правильного завершения работы, ] kexec -e будет выполняться напрямую)

     systemctl kexec 
     
  • Обратите внимание, что если вы создаете kexec-load @ .service , как описано в вики, если вы После перезагрузки systemd автоматически выполнит мягкую перезагрузку с использованием kexec вместо перезагрузки BIOS

Немного улучшенная версия, которая дает имена служб systemd:

PIDS="(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u)"
for PID in $PIDS; do
    systemctl status $i
done | grep '●' | awk '{print $2}' | sort -u

или однострочное:

for i in $(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u); do systemctl status $i; done | grep '●' | awk '{print $2}' | sort -u

Обратите внимание, что есть некоторые проблемы:

  • systemctl daemon-reload должен выполняться до перезапуска чего-либо еще
  • , если PID 1 ( сам systemd ) должен быть перезапущен, он может выполняется с помощью systemctl daemon-reexec
  • systemctl restart dbus.service нарушает работу некоторых других служб, их необходимо перезапустить после перезапуска dbus:
    • systemd сама: systemctl daemon-reexec
    • systemd-logind
    • systemd-machined
    • , возможно, другая systemd - * / другие службы, которые (сильно) используют dbus
  • Если вы подключены через SSH, и SSH необходимо перезапустить, но systemctl restart sshd не перезапускает его, пока вы подключены, я вижу 2 варианта:
    • расписание systemctl restart sshd с использованием в / cron / systemd таймеры
    • перезапуск SSH с использованием другой удаленной (защищенной) оболочки, такой как mosh
  • с запущенным screen / tmux , также могут блокировать такие службы, как SSH от перезапуска, самый простой способ - закрыть эти сеансы перед перезапуском служб
  • , как сказано в предыдущем ответе, может потребоваться выход / вход в систему, особенно для графических сеансов
6
27.01.2020, 19:47

Теги

Похожие вопросы