Windowsはブロードキャストのpingに応答しないようですね。これも駄目か。
何らかのブロードキャストに応答してくれればいいんですが。
やはり個別にpingするしかないのか。
for i in `seq 2 254`
do ping -c 1 192.168.0.$i &
done
sleep 1
PC=以下略
と、バックグラウンドでpingすれば時間を節約できます。
質問者
お礼
最終報告です。
ファイルサーバのアドレスを抜くのを忘れ、しばらく遮断できず。そのため、クライアントの遮断・起動を繰り返す。LANケーブルを抜けばいいだけだったのに...。
最終的に、shutdownの時刻をtxtに落とすのも追加し、無事に動いております。明日事務所でも試そうと思っています。
いろいろ苦労した甲斐があり、勉強になりました。
事務所ではパソコンの設定に慣れているものが皆無のため、その苦労を微塵も見せずにまた一歩一目置かれるようにさらっと設定したいと思います(マニアとして一目置かれているのかも)。
#PC起動していなければ遮断
if test $PC = 0
then echo $(date +%Y%m%d%H%M) SHUTDOWN >> /home/samba/log.shutdown.txt
/sbin/shutdown -h now
fi
質問者
補足
#!/bin/sh
#サーバシャットダウン用
#変数
#PC:PC起動確認スイッチ
PC=0
#サブネット内にping
for i in `seq 2 254`
do
#PCが起動していればもうpingしない
if test $PC = 0
then ping -c 1 192.168.0.$i
fi
#ping応答ありのときPC:ON
if test $? = 0
then PC=1
fi
done
#PC起動していなければ遮断
if test $PC = 0
then /sbin/shutdown -h now
fi
自分なりに工夫して上のようなスクリプトになりました。
(1).pingしたときの応答値でPC起動を確認
(2).起動いていればもうpingしない
whileでもできるかなぁと思いましたが、PCスイッチの判断とseq 2 254を同時に満たせるかどうか判らずこのようになりました。
バックグラウンドだと応答値が取得できず、pingをフォアでの実行にしました。思ったより時間がかかるので1分ではなく10分ごとにcronで実行中。
この後パソコンを切って、いよいよ最終テストです。
#1です。
サブネットが1つしかない範囲で使うのであれば、arp -a が使えると思います。Windows2000/XPにもあるコマンドです。
これは論理的なアドレスであるIPアドレスと、LANインタフェース固有の物理アドレスであるMACアドレスの対応表を表示するものです。
まず何らかの手段でブロードキャストを行います。その後で、arp -a をやって、結果からルーター等常時オンになっているものを除いたものが起動しているPCになるので、これが無ければOKということになります。
テストしてませんが、こんな感じでいけると思います。
smbtree -b
PC=`arp -a | fgrep -v '(192.168.0.1)' | wc -l`
if test $PC = 0
then shutdown -h now
fi
お礼
最終報告です。 ファイルサーバのアドレスを抜くのを忘れ、しばらく遮断できず。そのため、クライアントの遮断・起動を繰り返す。LANケーブルを抜けばいいだけだったのに...。 最終的に、shutdownの時刻をtxtに落とすのも追加し、無事に動いております。明日事務所でも試そうと思っています。 いろいろ苦労した甲斐があり、勉強になりました。 事務所ではパソコンの設定に慣れているものが皆無のため、その苦労を微塵も見せずにまた一歩一目置かれるようにさらっと設定したいと思います(マニアとして一目置かれているのかも)。 #PC起動していなければ遮断 if test $PC = 0 then echo $(date +%Y%m%d%H%M) SHUTDOWN >> /home/samba/log.shutdown.txt /sbin/shutdown -h now fi
補足
#!/bin/sh #サーバシャットダウン用 #変数 #PC:PC起動確認スイッチ PC=0 #サブネット内にping for i in `seq 2 254` do #PCが起動していればもうpingしない if test $PC = 0 then ping -c 1 192.168.0.$i fi #ping応答ありのときPC:ON if test $? = 0 then PC=1 fi done #PC起動していなければ遮断 if test $PC = 0 then /sbin/shutdown -h now fi 自分なりに工夫して上のようなスクリプトになりました。 (1).pingしたときの応答値でPC起動を確認 (2).起動いていればもうpingしない whileでもできるかなぁと思いましたが、PCスイッチの判断とseq 2 254を同時に満たせるかどうか判らずこのようになりました。 バックグラウンドだと応答値が取得できず、pingをフォアでの実行にしました。思ったより時間がかかるので1分ではなく10分ごとにcronで実行中。 この後パソコンを切って、いよいよ最終テストです。