1

crontab -e 内に、このエントリを追加しました

* * * * * /usr/bin/memcached_autostart.sh

/usr/bin 内には、memcached_autostart.sh という名前のスクリプトがあります。

/usr/bin memcached_autostart.sh

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

この方法でこれを手動でテストしたとき

Memcache を開始しました

memcached -d -m 16 -p 11211 -u nobody
ps -eaf | grep 11211 | grep memcached
nobody     611     1  0 13:28 ?        00:00:00 memcached -d -m 16 -p 11211 -u nobody

次に、プロセスを強制終了しました

kill -9 611

ダウンした場合、crontab が Memcache を自動的に開始することを期待していましたが、Memcache を開始していません。何か問題があるかどうか教えてください。

4

3 に答える 3

2

crontab が機能しているかどうかを確認する

テストした後、シェルの終了は 1 より大きい可能性があるため、これに合わせて変更してみてください。

if [ $? -ge 1 ]
于 2012-11-10T08:13:01.257 に答える
1

最初にあなたのcron:

これのタイトルでは、24 時間ごとのことを言っています。このためには、最初の 2 つのフィールドで 1 日のどの瞬間を指定する必要があります。

1 2 * * * doTheJob

したがってday of month、毎回、month毎回day of week、2 時間 1 分にスクリプトが実行されます。

スクリプトを に配置することをお勧めし/etc/cron.dailyます。

さて、仕事のために、あなたは試しましたか:

ps -C memcached

ps -C memcached ho pid

echo $?

pidがない場合memcached(つまり、応答がない場合)、$?null であってはなりません。

かもね:

ps -C memcached >/dev/null || memcached -d -m 16 -p 11211 -u nobody

これは、単純に crontab で、スクリプトの外にある可能性があります。

1 2 * * * ps -C memcached >/dev/null || memcached -d -m 16 -p 11211 -u nobody

(注: システムの crontab:/etc/cron.d/myJobまたはを使用する場合/etc/crontab、ユーザー (ルート) の crontab の代わりに、userlevel を 6 番目のフィールドとして指定する必要があります。

1 2 * * * root ps -C memcached >/dev/null || memcached -d -m 16 -p 11211 -u nobody

)

于 2012-11-10T14:34:16.627 に答える
0

/usr/local/最初に、 notの下に独自のものを追加する必要があります/usr/(これはパッケージ メカニズムによって管理されます)。

次に、crontabエントリ

  * * * * * /usr/bin/memcached_autostart.sh

毎分実行されています。本当にそんなに頻繁に実行しますか? memcached私は 5 分か 10 分ごとに実行します (そして、非常にまれにクラッシュする十分にデバッグされたデーモンであるため、本当に役立つかどうかさえわかりません)。

最後に、ログ メッセージをスクリプトに追加することをお勧めします (たとえば、スクリプトを実行可能にするようにしloggerてください)。/usr/local/bin/memcached_autostart.shchmod a+x /usr/local/bin/memcached_autostart.sh

プロセス テーブルをクエリするには、pidofまたはpgrep;を使用できます。どのプロセスがポート 11211 をリッスンしているかを知りたい場合は、netstat -p

于 2012-11-10T08:13:37.157 に答える