タグ

2017年2月14日のブックマーク (2件)

  • cronから起動されたスクリプトの多重起動チェック

    多重起動チェックについてググってみると次のような例が多く見つかりました [[ $$ != `pgrep -fo "$0"` ]] echo "$0 is already running" && exit 2 これは、自身と同じプロセス名を検索して、 そのもっとも古いプロセスIDが自身のプロセスIDと一致していればおーけー という処理になります。 ただ、これは直接スクリプトを実行した場合にのみ有効で cronなどから子プロセスそしてスクリプトを実行した場合は $$は子プロセスとして起動されたスクリプトのプロセスID pgrep -fo "$0"で引っかかってくるのが起動元の親プロセスのIDとなり 一致しないので、多重起動として扱われてしまいました(´・ω・`) これに対応するため、親プロセスIDが格納される$PPIDとの比較も追加して次のようにしてみました [[ $$ != `pgrep -

  • 高速にリモートホストのポートがListenしているかを調べる - 人間とウェブの未来

    hb.matsumoto-r.jp 以下のエントリは一部誤認が含まれていたので、上記エントリにその旨をまとめましたので御覧ください。 とある事情でミドルウェア上から高速にリモートホストのポートのListenチェックをしたくなりました。ローカルホストのポートであれば、/procやnetlinkなどを使って素早くチェックする方法がありますが、今回は対象がリモートホストなのでソケットでなんとかする必要があります。 そこで、誰もがまず思いつくのは、connect()システムコールによってリモートホストのポートに接続しにいって、connectできればOK、できなければNGと判定する方法があり得るでしょう。(高負荷時に接続できないパターンはListenしていないと判定してよい) そこで一旦、最低限socket()システムコールとconnect()システムコールで接続する時のパケットをtcpdumpで眺

    高速にリモートホストのポートがListenしているかを調べる - 人間とウェブの未来