• 締切済み

自作スクリプトがいつの間にか落ちています

お世話になります。 今、自前でサーバー監視(冗長化)のためのスクリプトを作成しているのですが、2~3日ほど動かしているといつの間にかそのスクリプトのプロセスがいなくなっています。 原因追求方法というか、スクリプト内で問題があったらエラーをログに吐いて終了するようにしているのですが、ログにはなにも残っていません。 まだスクリプト初心者でよくわかっていないのですが、自分なりにいろいろ考えて作っています。 2~3日は動いているのでソース自体には問題ないと思っています。 今回知りたいこととしては ・なぜおちるのか ・原因究明方法 を参考程度に教えていただければと思っています。 ちなみに仕様としては、 サーバー2台構成(現用、待機)で待機側から現用へ向けてpingを使いネットワークステータスを監視しています。 待機から現用へ疎通がとれなくなると自分のIPを書き換え現用で監視していたものと同じプロセスを起動し、exit 1 で抜けます。 現用側では目的のプロセスを監視するスクリプトを組んであり、そのプロセスがおちるとネットワークを切断し、exit 1 で抜ける仕様になっています(このスクリプトは問題ありません) シェルは posix を使用しています。 詳細なところはもっといろいろありますが(ログを吐いたりメールを送ったりなど)概要的にはこんな感じで一応HAを実現しています。 もちろんですが、cron などの定期処理はなし。サーバーがリブートした形跡もありません。忽然とプロセスが姿を消しています。 今考えていることとしては スクリプトの先頭にset -x を置いて現象が再現するまでひたすらログをとり続けるしかないのかなぁとおもっています。 どなたか知恵をお貸しいただけないでしょうか?

みんなの回答

  • Quux
  • ベストアンサー率57% (16/28)
回答No.2

なんらかのリソース制限にかかっている可能性。 ulimit

noname#39970
noname#39970
回答No.1

処理が止まる場所でそのままscriptが落ちる可能性。 通常はエラーを返してそれをもってエラー処理を取り出し終了するものと思われる。 エラーを受け取らずにプロセスが落ちてる可能性。 set -x を使うかどうかは別として原因が判るまでは挙動をログに取ってどの辺りで落ちているのかを確定した方が良いと思う。

sentakuc
質問者

お礼

エラーを受け取らずにプロセスが落ちてる可能性。 なるほど、ありえますね。。。 回答ありがとうございます。

関連するQ&A

  • あるスクリプトでのCronDeamonの設定がうまくできません。

    現在Fedora Core 3で自宅サーバー構築をしています。 AuctionEXというスクリプトでcron.cgiの設定をするところがあるのですが、 /etc/cron.dailyにcron.shというシェルスクリプトをFedoraで直接作成して置いたのですが、動作していないようなのです。 cron.shの内容は以下のようにしました。 #!/bin/sh /usr/bin/perl /var/www/html/auction/cron.cgi exit パーミッションは755に設定しました。 今行き詰ってしまってどうすれば良いか全く検討がつきません。 どなたか教えていただけるととても助かります! 以下に、その設定に関してのREAD_MEファイルを載せます。 Cron Daemon の設定 cron.cgi の中の設定項目を設定して下さい。 ※フルパスを設定する項目がありますので、忘れずに設定して下さい。 お使いのサーバーにTELNET(SSH)等で接続して お好きな時間に"cron.cgi"を起動するように設定してください。 ("cron.cgi"の各項目を環境に合わせて編集してください。) (!)チェックポイント (1)オークションの時間終了した商品の出品者あてに、きちんと「終了通知」が送信されるかどうか? (2)再出品を設定した商品が、きちんと自動再出品されているかどうか? ※cron 設定はサーバ側で設定する必要があります。 ("cron.cgi"の中を編集しても起動するわけではありません。) ※設定方法は環境により異なりますので、ここでは省略させて頂きます。 ※レンタルサーバでも、サーバがcronをサポートしており、telnet接続が許可されていれば、設定は可能だと思います。

  • シェルスクリプトとmaillogの関係

    以下のようなシェルスクリプトを1時間ごとにcronで動かしています。 #!/bin/sh php -f check.php > result exit その結果、/var/log/maillogに、root宛てと思われる記録がシェルスクリプトと同じ1時間ごとに記録されるようになってしまいました。 maillogにその記録を残さないようにするにはどのようにしたらいいのでしょうか。 シェルスクリプトの書き方がおかしいのでしょうか。 よろしくお願いいたします。

  • cronでシェルスクリプトが実行されない

    Linuxでファイルのバックアップを取るため backup.shというシェルスクリプトを組み、コマンドから実行する場合問題ないことを 確認しています。ところがcronに設定し自動実行すると内容が実行されておりません。 /var/log/cronを確認したところ時間通り実行されているというログは残っています。 /var/spool/cron/にrootというファイルを作成し 00 23 * * * /BACKUP/backup.shを実行させたいのです。 なぜ、手動の場合は問題がないのにcronで設定すると問題が生じるのでしょう? もし、お分かりの方は教えてください。 OSはRed Hat Linux release 8.0 (Psyche)です。

  • Webサーバが固まる原因について

    よく理解できないことが起きているので、質問することにしました。クライアント様のサーバなのですが、SSHでリモートでアクセスできるのにウェブサーバやメールサーバが正常に動作していないことが稀にあります。 cronで毎分でPINGを飛ばして死活監視を実装していますが、この監視ではウェブサーバやメールサーバが正常に機能しているかのチェックにはなりません。したがって、そこまでチェックする機能を実装させるべきなのですが。 サーバの基本仕様を載せておきます。 OS: Fedora Core1 Webサーバ: apache1.3.29 + openssl-0.9.7e メールサーバ: postfix-2.1.4, qpopper4.0.5 疑問なのは、httpsdデーモンのプロセスが動作しているにもかかわらず、ホームページ閲覧ができない症状が起き得るのかということです。httpsdのアクセスログを見ると、不正アクセスらしいログが多々出ておりました。Linuxサーバなのに、Windowsサーバのファイル(.aspファイルなど)を閲覧しようとしていてファイルが存在しない、といったログが多々出ておりました。 もし、同じような症状が起きて問題解決できた方がいらっしゃれば、是非アドバイスをお願いします。

  • スクリプトの書き方

    過去ログを検索してもなかったので質問させて頂きます。 超初心者ですが何卒宜しくお願い致します。 ある数値データ(CSVファイル)をデータベース(Linuxサーバー:MySql)にUPし、レポートツールからODBCで接続し数値をとりたいと思い、現在このような方法を考えております。 1.まずCSVファイルを自分のPCにDL。 2.CSVファイルをLinuxサーバーにアップロード。 3.アップロードしたCSVファイルをデータベースにインポート。 4.レポートツールからODBCでデータベースに接続し、データの管理。 ここで3.のCSVファイルをデータベースにインポートするためのスクリプトの書き方が全くわかりません。insert文で一個一個うっていけばいいのですが、できれば、スクリプトを書いてcronで自動実行したいと考えております。 どなたか書き方、もしくは3.の方法を説明したサイトなどを教えて頂きたいです。 逆にこうしたほうがいいというご意見なども全然OKです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • サーバー監視プログラム(シェルスクリプト)

    現在シェルスクリプトでpingによるサーバー監視をプログラムを作成しております。 そこで問題なのですが、応答がないマシンにpingを打つと永遠に終了しません。 スクリプト事態にTTLなど生存時間を設定するのか可能か? 一定時間のあと次の処理に進みたい場合はどうしたらよいか? 5秒応答がなかったら強制終了は可能か? 以下スクリプトです。 --------------------------------------------- #!/bin/sh host=192.168.1.2 ping -c 5 ${host} 1>/dev/null 2>&1 rc=$? if [ ${rc} -eq 0 ]; then echo "${host} is alive." else echo "${host} is not responding or network error." fi exit 0 --------------------------------------------- お願いします。

  • ログオンスクリプトについて

    運用目的でユーザのログオンをファイルサーバ上のファイルに記録したくて ログオンスクリプトで下記のスクリプトをOUのグループポリシーで 指定していますが「書き込みできません」になってしまいます。 スクリプトの内容はネット上のものを参考に環境に合わせて変えてあります。 環境 server01:Windows 2000 Server クライアント:Windows XP Pro 書き込みエラーということでアクセス権を疑いましたが Everyoneに対してフルコントロールの共有フォルダですのでほかの原因かなと思います。 このスクリプトをダブルクリックで実行すると正常に書き込みできます。 ログオンスクリプトとして指定するとエラーになってしまいます。 sEvent = "LogOn" sFileName = "\\server01\log\logon" & _ Year(Now) * 100 + Month(Now) & ".log" Set FSO = CreateObject("Scripting.FileSystemObject") Set wshNetwork = CreateObject("WScript.Network") sMsg = sEvent & "," & _ Now & "," & _ wshNetwork.ComputerName & "," & _ wshNetwork.UserName & "," & _ wshNetwork.UserDomain set oText = FSO.OpenTextFile(sFileName, 8, true, 0) oText.WriteLine(sMsg) oText.Close ご存知の方おられましたらご教授お願い致します。

  • ログインスクリプトが動かない

    会社のPCの一台が、ログインスクリプトが立ち上がりの時に動かないんです。 でも、一度立ちあがってから、「ログオフ」して立ち上げると、ログインスクリプトが動きます。 他のPCは全然問題ありません。 1台だけなんです。 トラブルのPCのOSは98です。 ファイルサーバーは、NT4.0です。 宜しくお願いたたします。

  • シェルスクリプトでPHPを実行したい

    シェルスクリプトでPHPを実行したいのですが、うまくできません。 centos5でcrontabに 20 0 * * * /bin/sh /var/www/html/test/test.sh と登録しています。 cronのlogをみたところ Dec 12 00:20:01 localhost crond[19060]: (root) CMD (/bin/sh /var/www/html/test/test.sh) と記録されていてここまでは問題ないように思えます。 test.shの中身は #!/bin/sh cd /var/www/html/test/ php -f daily.php > result exit になっています。 daily.phpが実行されないので、daily.phpに何かおかしなところがあるのかと思い daily.phpを直接ブラウザから起動してみたところ問題なく処理されました。 このような経緯でtest.shの中身が間違っていると思っているのですがどこが間違っているのか分かりません。 どなたかアドバイス頂けると助かります。

  • IP切り替えのテクニックについて

    CentOS5(カーネル2.6.18)、bind-9.3.4の2台のサーバが動いていて、障害時に、同じドメイン名のまま、IPアドレスが切替わるような工夫をしたいと考えています。 データの同期化については今回考慮せず、単純にIP切り替えができればいいという考え方になります。 ドメイン名:example.com ・仮想IP:111.22.33.44 ・稼動サーバ:222.33.44.55 ・待機サーバ:333.44.55.66 ※稼動サーバと待機サーバは同じネットワーク上になく別々の回線でお互いに遠距離に位置しているとします。 このようなイメージで、それぞれのサーバの死活監視は、URLのアドレスでつながるかをcronで数分ごとにチェックするようにし、いずれかが障害などでつながらなかった場合には、IP切替を行って、同じドメイン名(example.com)で、稼動サーバもしくは待機サーバのIPアドレスに接続先が変わる感じです。 heartbeatのようなソフトも出ていますが、オリジナルのスクリプトを作って、この切替ができるものなのでしょうか?高額な機器などを使わずに実現できればそれに越したことはないのですが、純粋に同じドメイン名でうまくIPが切り替わればこと足りるので、そのアドバイスを頂ければと思っています。参考になるサイトでもあれば教えて頂けますと助かります。