w
と入力すると、ログインしているすべてのユーザーのリストを取得できます。
また、killall -u USERNAME
がユーザーUSERNAME
に関連付けられているすべてのプロセス(bash /シェル、sshdプロセスなどを含む)をキックすることも知っています。私の知る限り、これがサーバーの「ユーザーをキックオフ」する方法です。
ただし、すべてのユーザーをキックオフする方法はわかりません。ユーザーのリストを取得するために何らかの方法でw | cut -d' ' -f1
を取得し(そして何とかして空白行とUSERフィールドと自分のユーザー名を削除し)、それをkillall
の-uコマンドにフィードする必要がありますか?
または、より良い方法がありますか?
あなたはすべてで殺すことができます:
who | awk '$1 !~ /root/{ cmd="/sbin/pkill -KILL -u " $1; system(cmd)}'
Rootになるか、Sudoを使用する必要があります。
すべてのユーザーを殺すことは危険であり、ファイルシステムを損傷する可能性があることに注意してください。さらに、ユーザーを困らせます。あなたがそれらを殺したときにそれらの1つがmysqlのメンテナンスのようなことをしている場合、あなたは何が起こると期待していますか?
本当にps -ef | grep "user"
などを使用して、プロセスを検査する必要があります。
代わりに警告しないのはなぜですか?
shutdown -h +10 "Server is going down 10 minutes. Save your work and logout."
動作しているように見えるこのスクリプトも書きました:
#!/bin/bash
ME=$Sudo_USER
if [[ -z $ME ]]
then
echo "Must run script using Sudo."
exit 1
fi
who | while read NAME REST
do
if [[ $NAME != $ME ]]
then
killall -u "${NAME}"
if [[ "$?" = "0" ]]
then
echo "Disconnecting ${NAME} from the system..."
else
echo "Could not disconnect ${NAME} from the system..."
fi
fi
done