走った後
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
呼び出し
kexec
(systemctl
正しい終了のために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 sshd
at/cron/systemd
タイマーを使用してスケジュールを計画する- 別のリモート(セキュリティ)シェルを使用して再起動してください
SSH
。mosh
- プロセスを実行すると、
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