9

Bash:確認し、実行されていない場合はプロセスを実行します

こんにちは、私の要件は、Memcacheサーバーが本番環境で何らかの理由でダウンした場合、すぐに再起動したいということです

通常、以下に示すように、レプリケーションを使用するユーザーがいない場合は、この方法でMemcacheサーバーを起動します。

memcached -u nobody -l 192.168.1.1 -m 2076 -x 192.168.1.2 -v

したがって、このために、この方法でcrontabにエントリを追加しました

(crontab -e)

*/5 * * * * /home/memcached/memcached_autostart.sh

memcached_autostart.sh

#!/bin/bash
ps -eaf | grep 11211 | grep memcached
# if not found - equals to 1, start it
if [ $? -eq 1 ]
then
memcached -u nobody -l 192.168.1.1 -m 2076 -x 192.168.1.2 -v
else
echo "eq 0 - memcache running - do nothing"
fi

私の質問はmemcached_autostart.sh内にあり、memcachedサーバーを自動再起動するために、上記のスクリプトに問題はありますか?

または

(cronジョブを使用するのではなく)これを達成するためのより良いアプローチがある場合は、 あなたの経験を共有してください。

4

2 に答える 2

6

はい、問題はps -eaf | grep 11211 | grep memcached、開始するたびに常に変更されるプロセスIDであると想定しているため、実行する必要があるのはps -ef | grep memcached

それが役に立ったことを願っています

于 2012-11-10T08:10:40.020 に答える
5

から実行する代わりにcron、適切なinit-scriptを作成することをお勧めします。例についてはを参照/etc/init.d/してください。また、これを行うと、ほとんどのシステムには、開始、再起動、停止のチェック、すでに実行中のプロセスのチェックなど、ほとんどの作業を処理する機能がすでに備わっています。

ほとんどのデーモンスクリプトは、pidを特別なファイル(例/var/run/foo)に保存してから、そのファイルの存在を確認できます。

Ubuntuの場合、たとえば、/etc/init.d/skeletonコピーできるスクリプトを見ることができます。

于 2012-11-10T06:12:32.573 に答える