変数をキャッチ

変数をキャッチ

Pythonスクリプトをサービスとして起動および停止するための単純なinitスクリプトを作成しました。 Python 2.4および2.6がインストールされているCentOS 5システムで実行されているPythonのバージョンが何であるかを明確にする必要がありました(どちらもyumを介して)。

これが私が今まで持っているものです:

#!/bin/sh
# chkconfig: 123456 90 10

workdir=/usr/local/bin/Foo

start() {
    cd $workdir
    /usr/bin/python26 $workdir/Bar.py &
    echo "FooBar started."
}

stop() {
    pid=`ps -ef | grep '[p]ython26 /usr/local/bin/Foo/Bar.py' | awk '{ print $2 }'`
    echo $pid
    kill $pid
    sleep 2
    echo "FooBar stopped."
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: /etc/init.d/foobar {start|stop|restart}"
    exit 1
esac
exit 0

だから:

1)ファイル名とディレクトリ名の管理を「よりスマートに」して、後でスクリプト内のすべての内容を繰り返すことができるようにいくつかの変数を設定したいと思います(例:workdir)。私の主な問題はgrepステートメントにあります。 grep内の変数を処理する方法が見つかりませんでした。より効率的なアプローチの提案をいただきありがとうございます。

2)この初期化スクリプトに「ステータス」サポートを追加し、Bar.pyが実行されていることを確認したいと思います。

答え1

おそらく何かが欠けているようですが、なぜそれを触っているのか理解できませんgreppgrep目的は次のとおりです。

#!/bin/sh
# chkconfig: 123456 90 10

workdir=/usr/local/bin/Foo

start() {
    cd $workdir
    /usr/bin/python26 $workdir/Bar.py &
    echo "FooBar started."
}

stop() {
    pid=`pgrep -f '/Bar.py$'`
    echo $pid
    kill $pid
    sleep 2
    echo "FooBar stopped."
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: /etc/init.d/foobar {start|stop|restart}"
    exit 1
esac
exit 0

このpgrepコマンドは、名前が指定されたパターンに一致するプロセスのPIDを返すように設計されています。これはPythonスクリプトなので、実際のプロセスは次のようになります。

python /usr/local/bin/Bar.py

プロセス名はどこにありますかpython?したがって、-fフルネームと一致するようにpgrepのフラグを使用する必要があります。

   -f, --full
          The pattern is normally only matched against the  process  name.
          When -f is set, the full command line is used.

これが同様のものと一致しないようにするために、fooBar.pyパターンは最後の文字列の後の文字列部分()/Bar.py$とのみ一致します。/$

後で参照できるように、ps | grepPIDを取得するために絶対に使用しないでください。これは、常に実行中のプロセスの行と、開始したばかりのgrepの行、つまり少なくとも2行を返します。

$ ps -ef | grep 'Bar.py'
terdon   27209  2006 19 17:05 pts/9    00:00:00 python /usr/local/bin/Bar.py
terdon   27254  1377  0 17:05 pts/6    00:00:00 grep --color Bar.py

関連情報