web-dev-qa-db-ja.com

pacmanのアップグレード後に再起動する必要がありますか?

走った後

Sudo pacman -Syyu

または

Sudo pacman -S [something to install]

安全のために再起動する必要がありますか?

17
ahtmatrix

カーネル、glibc、またはsystemdに更新がある場合は、更新されたバージョンが使用されるように再起動することができます。たとえば、デスクトップ環境を更新する場合は、単純なログアウト/ログインで十分です。

10
schaiba

最良の方法は、古いライブラリを使用しているプログラム/サービスを見つけて再起動することです。また、「lsof」を使用してすべての使用済みファイルをリストし、「DEL」タイプのファイルを見つけることで、これを実現できます。 DELは、ファイル名がファイルシステムから削除されたが、誰かがそれを使用しているためにメモリに残っていることを意味します。

ここに完全なコマンドラインがあります:

 Sudo lsof +c 0 | grep 'DEL.*lib' | awk '1 { print $1 ": " $NF }' | sort -u
11
user576557

再起動する唯一の必須の理由は新しいカーネルです(そして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
    
  • Wikiで説明されているように[email protected]を作成した場合、再起動すると、systemdはBIOSの再起動ではなく、kexecを使用して自動的にソフト再起動します。

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

または1行:

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は他の一部のサービスを壊します。dbusrestart:の後で再起動する必要があります。
    • systemd自体:systemctl daemon-reexec
    • systemd-logind
    • systemd-machined
    • おそらく他のsystemd-*/dbusを(頻繁に)使用する他のサービス
  • SSHで接続していて、SSHを再起動する必要があるが、接続している間はsystemctl restart sshdは再起動しない場合、2つのオプションが表示されます。
    • systemctl restart sshdタイマーを使用してat/cron/systemdをスケジュールする
    • SSHなどの別のリモート(セキュア)シェルを使用してmoshを再起動します
  • screen/tmuxを実行すると、SSHなどのサービスの再起動がブロックされることもあります。最も簡単な方法は、サービスを再起動する前にこれらのセッションを閉じることです
  • 以前の回答で述べたように、特にグラフィカルセッションでは、ログアウト/ログインが必要になる場合があります
6
Michel Ganguin

簡単な方法は、実行中のカーネルのバージョンをディスク上の最新のカーネルと比較することです。簡単にできる script を見つけました。

複数のカーネルをインストールしているので、実行中のカーネルに対応するカーネルのみをチェックするようにスクリプトを変更しました。たとえば、現在バージョン4.9.79と4.14.16がインストールされているため、/ boot/vmlinuz-4.14-x86_64を確認する必要があります。残念ながら、バージョン5.1の使用を開始するとこれは機能しないため、更新が必要(4を3に置き換える)か、より堅牢な方法を見つける必要があります。

これが私のスクリプトです:

#!/bin/sh
NEXTLINE=0
FIND=""
CURRENT_KERNEL=`uname -r`
KERNEL_PATH="/boot/vmlinuz-${CURRENT_KERNEL:0:4}"
for I in `file $KERNEL_PATH*`; do
  if [ ${NEXTLINE} -eq 1 ]; then
    FIND="${I}"
    NEXTLINE=0
   else
    if [ "${I}" = "version" ]; then NEXTLINE=1; fi
  fi
done
    if [ ! "${FIND}" = "" ]; then
      if [ ! "${CURRENT_KERNEL}" = "${FIND}" ]; then
    echo "Boot required"
  else echo "No boot required"
  fi
fi
0
Aurelien