カーネルエラーが発生した場合、SSHを介して再起動する「最後の手段」Linuxターミナルコマンドはありますか?

カーネルエラーが発生した場合、SSHを介して再起動する「最後の手段」Linuxターミナルコマンドはありますか?

私はUbuntu 10.04がインストールされている小さなサーバーを持っていて、別のコンピューターでサーバーを操作していて、それを使ってsshファイルnfsを共有したいと思います。これはデフォルトでクライアントの1つが削除され、nfs-kernel-serverサーバーをシャットダウンするまで機能します。停止するのは正しいようですが:

$ sudo service nfs-kernel-server stop
 * Stopping NFS kernel daemon                                                     [ OK ] 
 * Unexporting directories for NFS kernel daemon...                               [ OK ] 

...ログには次の内容が表示されます。

Feb  5 11:50:17 user init: statd main process (3806) killed by KILL signal
Feb  5 11:50:17 user init: statd main process ended, respawning
Feb  5 11:50:17 user init: idmapd main process (3808) killed by KILL signal
Feb  5 11:50:17 user init: idmapd main process ended, respawning
Feb  5 11:50:17 user statd-pre-start: local-filesystems started
Feb  5 11:50:17 user sm-notify[3815]: Already notifying clients; Exiting!
Feb  5 11:50:17 user rpc.statd[3830]: Version 1.1.6 Starting
Feb  5 11:50:17 user rpc.statd[3830]: Flags: 

...これは、一部のnfs関連プロセスが停止して再生成しても構いません。この時点で再びsshを介して実行しようとすると、sudo service nfs-kernel-server startコマンドが停止し、次/var/log/syslogの結果が表示されます。

Feb  5 11:43:55 user mountd[2045]: authenticated mount request from 192.168.0.2:1005 for /media/disk (/media/disk)
Feb  5 11:45:19 user mountd[2045]: Caught signal 15, un-registering and exiting.
Feb  5 11:45:19 user kernel: [27428.148368] nfsd: last server has exited, flushing export cache
Feb  5 11:45:19 user kernel: [27428.148431] BUG: Dentry d0bc8b28{i=1f6,n=} still in use (1) [unmount of vfat sdd8]
Feb  5 11:45:19 user kernel: [27428.148473] ------------[ cut here ]------------
Feb  5 11:45:19 user kernel: [27428.148481] kernel BUG at /build/buildd/linux-2.6.32/fs/dcache.c:670!
Feb  5 11:45:19 user kernel: [27428.148491] invalid opcode: 0000 [#1] SMP 
Feb  5 11:45:19 user kernel: [27428.148501] last sysfs file: /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq
...
Feb  5 11:45:19 user kernel: [27428.148807] Call Trace:
Feb  5 11:45:19 user kernel: [27428.148824]  [<c024c780>] ? vfs_quota_off+0x0/0x20
Feb  5 11:45:19 user kernel: [27428.148838]  [<c021d4fc>] ? shrink_dcache_for_umount+0x3c/0x50
Feb  5 11:45:19 user kernel: [27428.148852]  [<c020d090>] ? generic_shutdown_super+0x20/0xe0
...
Feb  5 11:45:19 user kernel: [27428.149511] EIP: [<c021d4a9>] shrink_dcache_for_umount_subtree+0x249/0x260 SS:ESP 0068:ccc6de6c
Feb  5 11:45:19 user kernel: [27428.149631] ---[ end trace 6198103bb62887ac ]---
Feb  5 11:49:53 user init: idmapd main process (838) killed by TERM signal
Feb  5 11:49:53 user init: idmapd main process ended, respawning
Feb  5 11:49:53 user rpc.statd[769]: Caught signal 15, un-registering and exiting.
Feb  5 11:49:53 user init: statd main process ended, respawning
Feb  5 11:49:53 user statd-pre-start: local-filesystems started
Feb  5 11:49:53 user sm-notify[3790]: Already notifying clients; Exiting!
Feb  5 11:49:53 user rpc.statd[3806]: Version 1.1.6 Starting
Feb  5 11:49:53 user rpc.statd[3806]: Flags: 
...

問題は次のとおりです。このエラーが発生した後も、サーバー上のsshサーバーは(何らかの理由で)通常はまだ「アクティブ」なので、再度ログインしてsshプロセスを閉じようとすることができます(そしてシャットダウンが不可能であることに気付くでしょう)/usr/sbin/rpc.nfsd 8。絞首刑)。

ただし、この時点でSSHを介して再起動しようとすると、sudo shutdown -r now && exitサーバーPCは再起動プロセスを開始しますが、いいえ完了すると端末に移動し、いくつかのエラーメッセージが表示され、そのまま残ります。:(

問題は、サーバーPCがアクセスしにくい場所にあり、正しく再起動するためにそこに行き、Alt + SysRq + REISUBを実行する必要があることです(カーネルがそのキーの組み合わせに反応する場合、そうでなければハード電源を切る)。

だから私の質問は – Linuxにカーネルエラーが発生しても、コンピュータが(ただ停止/停止するのではなく)再起動するように「保証」する「ハード再起動」コマンドはありますか? - これを渡すことはできますかssh?ハード電源を切る(つまり、電源ボタンを10秒以上押して電源を切る)とハード電源を入れるのはどういう意味ですか?

ベストアンサー1

何が起こってもシステムが再起動されるようにするために、私は常に次の順序を実行します。

# echo s > /proc/sysrq-trigger
# echo u > /proc/sysrq-trigger
# echo s > /proc/sysrq-trigger
# echo b > /proc/sysrq-trigger

これを行うには、カーネルが次のことを行う必要があります。

  • ブロックデバイスの緊急同期
  • すべてのファイルシステムを読み取り専用でマウント
  • 再同期
  • o強制的にすぐに開始または終了するためにも使用できます。

たとえば、参照してください。こここの機能を説明するために。

おすすめ記事