shutdown -r
データ センターに raspi タイプのデバイスがあるのですが、最近、誤って指を太くして、シャットダウン コマンドを画面上の間違った端末に貼り付けてしまいました。オプションを保持したまま削除する方法はありますか#poweroff
#shutdown -P -H
?
私はコマンドを保持したいshutdown -r
。システムをフリーズさせたり、IP テーブル ルールで自分自身をロックアウトしたりした場合には、タイマーを設定するのがよい。例shutdown -r +10
答え1
systemdベースのLinuxディストリビューションを使用している必要があります。この場合、次のことができるはずです。マスクpoweroff ターゲットを削除して、systemd がそれを実行 (および電源オフ) しないようにします。例:
systemctl mask poweroff.target
これにより、再起動以外でシステムをシャットダウンすることは完全に不可能になります。何も起こらないことを確認します。
この場合、この VM の仮想電源スイッチはシステムをシャットダウンするために機能しなくなります。ただし、再起動は問題なく実行されます。
もちろん、変更を元に戻すには、ターゲットのマスクを解除するだけです。その後、システムをシャットダウンできます。
systemctl unmask poweroff.target
答え2
これを実現するにはいくつかの方法があります。 1 つは、通常の非特権アカウントで作業することです。この場合、sudo を使用してコマンドを実行し、パスワードを入力する必要があります。その後、visudo を実行して、次の内容を /etc/sudoers に追加できます。
## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *
また、sudo 資格情報のキャッシュを無効にするには、以下も追加します。
Defaults timestamp_timeout=0
これにより、以前に sudo を使用してコマンドを呼び出した場合に資格情報のキャッシュが防止されます。
例:
[root@ops ~]# su - jdoe
[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
[jdoe@ops ~]$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ sudo shutdown -H
[sudo] password for jdoe:
^[[A[jdoe@ops ~]$ sudo shutdown -c
[sudo] password for jdoe:
上記の例では、 を実行するときにパスワードを入力する必要がありませんでしたsudo shutdown -r +10
が、残りの部分では が必要でした。コマンド ( ) の前に sudo を入力する必要がないようにするにはsudo shutdown -r +10
、.bash_profile または .bashrc に次のコードを追加します。
alias shutdown="sudo shutdown"
例:
[jdoe@ops ~]$ source ~/.bash_profile
[jdoe@ops ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[jdoe@ops ~]$ shutdown -c
[sudo] password for jdoe:
特権のないアカウントで作業し、必要に応じて sudo を使用してエスカレートすることがベスト プラクティスであることに注意してください。
答え3
というツールがありますモリーガードシャットダウンまたは再起動するマシンのホスト名を指定する必要があります。
Debian を使用していない場合は、プログラムがかなり原始的であるため、ソースからコンパイルするのは簡単なはずです。
答え4
シャットダウン実行可能ファイルの名前を、誤って呼び出されることのできない名前に変更します。
エイリアスshutdown
(whatever) -r