アップグレード後にパックマンを再起動する必要がありますか?

アップグレード後にパックマンを再起動する必要がありますか?

走った後

sudo pacman -Syyu

または

sudo pacman -S [something to install]

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

答え1

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

完全なコマンドラインは次のとおりです。

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

答え2

カーネル、glibc、またはsystemdのアップデートがある場合は、最新バージョンを使用するために再起動が必要になる場合があります。たとえば、デスクトップ環境を更新した場合は、簡単なログアウト/ログインで十分です。

答え3

再起動が必要な唯一の必須理由は新しいカーネルです(ソフト再起動にはkexecを使用できます)。バラよりhttps://wiki.archlinux.org/index.php/Kexec簡単に言えば、詳細は次のとおりです。

  • 新しいカーネルinitramfsのロードと起動のコマンドラインの指定

    kexec -l /boot/new-kernel --initrd=/boot/new-initramfs --reuse-cmdline
    
  • 呼び出しkexecsystemctl正しい終了のためにkexec -e直接実行されます)

    systemctl kexec
    
  • [email protected]Wikiで説明されているように1つを作成して再起動すると、BIOSの再起動を実行するのではなく、systemd自動ソフト再起動が使用されます。kexec

少し改善されたバージョンはシステムサービス名を提供します。

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

答え4

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

複数のカーネルがインストールされているため、現在実行中のカーネルに対応するカーネルのみを確認するようにスクリプトを修正しました。たとえば、現在のバージョン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

関連情報