クライアントの起動確認

このQ&Aのポイント
  • 事務所のパソコンをSambaを使ってファイルサーバとして利用しています。
  • 特定の時刻になると他のパソコンが起動していなければサーバをシャットダウンする予定です。
  • 自宅や小規模事務所ではWindowsでの作業が十分だと思っていましたが、ファイルサーバ用にGLANTANKを購入し、LINUXの設定にも挑戦しています。
回答を見る
  • ベストアンサー

クライアントの起動確認

事務所のパソコンで1台をsambaによりファイルサーバとして利用(OS:debian)。シェルとcronによりバックアップをとっています。 ある時刻になると他のパソコンが起動していなければサーバをshutdownしようと思っています。 http://juntake.dion.jp/server/Linux_HomeServer/no12/no12.html このページを参考にシェルを作ろうと思っています。各パソコンにpingを打って確かめるという方法ではなく、もっとスマートな方法があれば教えてください。 自宅・小規模事務所では作業はWindowsで十分。LINUXを使うには難しすぎるので敬遠していましたが、ファイルサーバ用にGLANTANKを購入し、いろいろな設定にチャレンジしています。LINUXのおもしろさが少しは判ってきたような。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.5

Windowsはブロードキャストのpingに応答しないようですね。これも駄目か。 何らかのブロードキャストに応答してくれればいいんですが。 やはり個別にpingするしかないのか。 for i in `seq 2 254` do ping -c 1 192.168.0.$i & done sleep 1 PC=以下略 と、バックグラウンドでpingすれば時間を節約できます。

taminchu
質問者

お礼

最終報告です。 ファイルサーバのアドレスを抜くのを忘れ、しばらく遮断できず。そのため、クライアントの遮断・起動を繰り返す。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

taminchu
質問者

補足

#!/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で実行中。 この後パソコンを切って、いよいよ最終テストです。

その他の回答 (4)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.4

手動時とcrontabで動作が違うのは殆どの場合環境変数の違いです。 おそらく、arp にPATHが通ってなくて、エラーになり何も標準出力に出力されず、wc -lが0になっていると思われます。/sbin/arp にしてください。 grep だと本来は、. を \. と書かないといけませんが、今回はまあ大丈夫ですね。

taminchu
質問者

補足

ありがとうございます。 shutdownのときも同じような状況にあったのに 気づきませんでした。自分の環境だとPATHは/usr/sbin/でした。 #!/bin/sh #サーバシャットダウン用 ping -b -c 2 192.168.0.255 PC=`/usr/sbin/arp -a | grep -v '(192.168.0.1)'` echo $PC > /home/samba/log.shutdown.$(date +%H%M).txt arp結果を落として様子を見ています。 SSHでサーバにログインしているときは、きっちりとarp結果がtxtに落とされていますが、ログインしていないときには何も表示されません。 ファイルサーバにアクセスしていれば、arpで認識されるかもしれませんが、クライアントが起動していれば認識してくれないと勝手にshutdownされてしまいそうです。 sshでログインしているときにOKということは、サブネット内pingも通っているはずなのに...。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

#1,#2です。 smbtreeだとパスワードを聞いてきますね。 ping -b 192.168.0.255 などと -b オプションをつければブロードキャストできるようです。 ネットワークが、192.168.0.0/24 で、ルーターが192.168.0.1 の場合、 ping -c 1 -b 192.168.0.255 PC=`/sbin/arp -a | fgrep -v '(192.168.0.1)' | wc -l` if test $PC = 0 then shutdown -h now fi

taminchu
質問者

補足

いろいろ試行錯誤しながらやっています。 コマンドをひとつひとつ確認しながらなので 報告に時間がかかってすいません。 水曜日の休みの日に自宅のサーバで試してみたスクリプトです。 #!/bin/sh #サーバシャットダウン用 ping -b -c1 192.168.0.255 PC=`arp -a | grep -v '(192.168.0.1)'| wc -l` if test $PC = 0 then /sbin/shutdown -h now fi ここに至る経緯 (1).smbtreeコマンドはなぜか反応なし。 sambaは3.0.14だったと思います。 smbtreeの情報が少なく、インストールされているのか、するものなのかわからずsmbtreeをあきらめ、サブネットにブロードキャスト (2).grepとfgrepの違いがよくわからずとりあえずgrepで (3).wcのオプションを-だけ、lは|と読み違え、しばらく困惑 (4).とりあえずエラーもなく動くようになったので、欲張ってcrontabに1分ごとに動くよう設定 (5).サブネット内の他のパソコンが動いているのにサーバ終了。 (6).起動後、1分以内でシャットダウンされてしまうので自分の欲深さを呪いながら必死にcrontabを変更。 スクリプトを手動実行するときは、シャットダウンされないのに、crontabで実行すると他の端末がついていようと切れてしまいます。 今、出先なので明日またいろいろ試してみようと思います。まずは、arpした結果がどうなっているかtextに落とすようスクリプトを変更し、そこから探っていこうと思います。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

#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

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

他のコンピュータの生死の判断にpingを使うのはきわめて一般的な方法です。 pingを使うのがどういう面でスマートでないと感じているのでしょうか?それがわからないと、「スマートな」方法を出しようが無いです。 参考にされているページを見てみましたが、素人が試行錯誤している感じで、勉強という意味では参考にしないほうが良いと思います。まあとりあえず動くスクリプトではあるので、勉強するつもりは無く、動くスクリプトがあればいいならここのをコピーするのもいいでしょう。

taminchu
質問者

補足

すいません。補足したつもりがボタンを押し忘れたようで反映されていなかったので、遅ればせながら補足を。 pingがスマートでない、のではなくひとつひとつのIPにpingを打つのがスマートではないなぁという事です。 事務所では6台のPCにDHCPでIPを割り振っているので、IPをいくつか列挙しておけば対処できますが、PCをふやしたとき等にスクリプトを書き換えなくても済むようにしたいのです。 (1)ある範囲(サブネット単位?)でpingを打てるようなものか、(2)for~nextなどを使いある程度余裕を持ったIPにpingを打つかを検討しています。 (1)のような方法があれば、教えてください。 よろしくお願いします。

関連するQ&A

  • 家庭内LANのファイル共有サーバにアクセスするとPCが青画面強制終了になってしまい、困っています

    現在、家庭内LANにlinux debian4.0 samba3.0系で稼動中のファイルサーバーがあります。このファイルサーバーにwindowsXPsp2のメインPCのマイネットワークからサーバー機の共有フォルダにアクセスすると、メインPCがフリーズ、青画面、強制終了してしまいます。 自分自身で原因を突き止めようとしましたが結局わからず困っています。 現在わかっていること ・pingは通ります ・エクスプローラで「\\192.168.x.x\」と打つと表示はされますが、「\\192.168.x.x\public」と打って共有フォルダに入ろうとすると強制終了します。 よろしくおねがいします

  • 最近の Windows サーバについて

    これまで5年ほど Linuxと Sambaでファイルサーバを使っています。 小さな事務所でスタッフは10人ぐらいです。 そのサーバも古くなってきたので今回は Windows サーバにしようかと思っているのですが 利用形態はドメインコントローラもSQLサーバも使わず単純なファイルサーバとして使いますが 10人が一度にファイルサーバにある別々の複数のファイルにアクセスするとなるとやはり CALは人数分用意しないとダメと言うことなのでしょうか? そう言う利用形態ならやはり Linux + Sambaがベターでしょうか? 宜しくお願いします。

  • eth0を確認するシェルスクリプト

    eth0が起動しているかどうかを確認し、起動していなかったらサーバを再起動させたいと考えているのですが、どのような方法が適当と思われますか。 google等で調べてみた感じでは、シェルスクリプト足すcronで可能なのかなと思っています。 もしシェルスクリプトを使用する場合 #!/usr/bin/sh if eth0が起動していなかったら;then shutdown -r now elif eth0が起動していたら ; then 何もしない fi というような考え方をすればいいのかなと思っているのですが、具体的な記述についてはまだピンときません。具体的記述方法、あるいは参考URL等教えていただければ幸いです。 ちなみにシェルはbash。OSはred hat 9です。 よろしくお願いします。

  • Sambaとファイヤーウォールのことで

    Sambaでファイルサーバーをたてようと思い、 DebianでLinuxをはじめてみました。 クライアント側のPCはWindowsXP Proです。 外部に公開するような用途には使わないので (というかまだ知識もないですし) 内部だけのでアクセスができればいいと考えており、 Iptablesでファーイヤーウォールの設定をしています。 基本的には外部からと内部からのパケットは破棄し、 ping・samba・ssh・ループバックアドレスは許可するように設定しました。 Iptablesの設定をする前は、Sambaで設定したフォルダに しっかりとアクセスできていたのですが、 iptablesを稼動させると、アクセスできなくなってしまいます。 SSHはiptablesを稼動させてもアクセスできているんです。 Sambaの使用するポートも udp 137 138 tcp 139 445はあけているのですが・・・ アドバイス頂けたら幸いです。

  • cronについて教えてください

    こんばんは。 Redhat Linuxを使用しております。 今回Cronで不要ファイルの削除を設定したいのですが、 その方法でわからない点があります。 「/etc/cron.monthly、cron.weekly、cron.daily、cron.hourly」 などの配下にシェルを置き、「/etc/crontab」ファイルの記載から これらシェルを呼び出すと思っています。 で「/var/spool/cron/user」ファイルなるものがありますが、 これの使用用途が分からず・・。 「/var/spool/cron/user」は必須の設定項目でしょうか?。 すみませんがアドバイスお願いします。

  • マウントしたディスクにcpで、所有者などがコピーできない。

    マウントしたディスクにcpで、所有者などがコピーできない。 Linuxサーバー上で、NFSマウントした外部ディスクに、cpコマンドでバックアップを取っています。(cronで夜間に実行) コピーは正しくおこなわれているのですが、  ・パーミッション  ・所有者  ・グループ が正しくコピーされておらず、ログには cp: failed to preserve ownership for `(ファイル名)': Operation not permitted と出ています。※権限がないと言ってることくらいは理解できます。 また、コピーされたファイルのユーザーと所有者は「nfsnobody」になっています。 パーミッションや所有者、グループも含めてコピーしたいと思っているのですが、どのようにすればよいのでしょうか? <補足> ・コピーは「cp -fpR」でやっています。 ・cronでシェルを起動してコピーを実行しています。 ・cronはrootで実行しています。 ・cronで実行せずに、直接シェルをたたいても同じです。 ・Red Hat Enterprise Linux Server release 5.3 (Tikanga)です ・コピー先も同じRedhatです。

  • sambaによるWINSサーバ

    Linux初心者です。 現在sambaによるWINSサーバの構築を行っています。 Web, 参考書で確認したところsamba設定ファイル(smb.conf)を以下の通り変更するだけでOKということでした。  winssupport = yes 上記の通り設定しsambaの再起動を行いましたが、NetBIOS名の解決がうまくいきません(pingが通りません)。 WINSサーバはwins.datというファイルで名前とIPアドレスの変換を行うみたいですが、現在の私の環境ではwins.datファイルが存在していません。 【質問】 wins.datはどの時点で作成されるのでしょうか? 例) ・sambaをインストールした時点 ・WINSサーバが起動した時点 wins.datが存在していないため名前解決が上手く行えていないと考えております。 【現環境】 OS: Redhat Linux ES 3 samba: samba3.0.6(ソースから導入) ネットワーク上に他のWINSサーバは存在しておりません。  以上、よろしくお願いいたします。  

  • LinuxサーバへwindowsXPからの書き込みにつきまして

    いつも大変お世話になります。 このたびホームサーバにLinuxのDebianを使用することになりました。 このサーバにsambaをインストールしWinXpProからファイルを共有したいと 思いましたが、Linuxサーバへの書き込み、または削除などができず、ここに投稿致しました。 LinuxもWinXpも自分で所有しているものです。 Linuxサーバにてrootのほかにhoge1というアカウントを作り、そのディレクトリに WinXpから、パスワードを入力してアクセスできるようにしました。 しかし、中身のファイルの書き込みや削除などができません。たとえばファイルをドラックドロップでもって いくと以下のようなエラーメッセージが表示されます。 エラーメッセージの内容は「ディスクがいっぱいでないか、 書き込み禁止になっていないか、またはファイルが使用中でないか確認してください。」 というエラーメッセージが出てきます。」です。 そこでLinux側で共有したいディレクトリーの所有者をhoge1とし、 パーミッションをわざと777にして、WinXpを再起動して再度試みましたが、同じエラーが表示されました。 また、上記の設定のまま、WinXpからはAdministratorで操作してみましたが 同じエラーメッセエージが表示されます。 hoge.htmlをWinXpのブラウザで閲覧することはできます。 書き込みしたいファイルとは、hoge.htmlファイルです。サイズファイルは2KBあります。 ちなにみLinuxのファイルやディレクトリをWinXp端末にコピーすることはできます。 sambaのバージョンはSamba 2.2.11を使用しています。 今思いつきで書ける内容は以上です。 パソコン暦は3年くらいですが、Linuxは最近はじめたばかりの初心者です。 この質問に関しては、ネットでもいろいろと紹介されていましたが、 当てはまるものが見つかりませんでした。 質問した内容に、誤った言葉を使用しているかもしれませんが よろしくお願いいたします。

  • Windowsのディレクトリ内のファイルを定期的にLinuxに転送したい。

    Windowsの特定のディレクトリ内にあるファイル全てを Samba設定しているLinuxのディレクトリ内に定期的にコピーしたいと考えています。(一日一回など) GUIでコピーすることはできるのですが、 これをバッチファイルにして一日一度Linuxへ転送する方法を教えていただけませんでしょうか? (Linuxのcronのような機能) 宜しくお願いいたします。

  • cronジョブ

    cronの実行時間は、/var/spool/corn/ユーザ のファイルで 時間が記述されているので、実行される時間はわかるのですが、 cronで、ある1つのシェルスクリプトが起動した時間から終了までかかった時間を知りたいのです。 (timeコマンド、メール送信による判断は無しでお願いします。) linuxのどこかのログファイルに、cronのシェル1つ1つのジョブの終了時間が記述されている ファイルはないでしょうか?(可能であれば、実行時間もわかるとよいのですが。) ご教授お願いします。