web-dev-qa-db-ja.com

Apacheのupstart-supervised initスクリプト?

Ubuntu 10.04でApacheを実行し、起動時にNice監視機能を使用します(Apache initスクリプトについてだけでなく、daemontoolsのような適切なサービス監視-つまり、Apacheが死んだときに再起動する、など)そのような)。

誰もubuntu 10.04でApacheを監視するための実行中の起動設定を持っていますか?

Googleは私にとって何の助けにもなりませんでしたが、私のgoogle-fuが弱い可能性があります。

16
Ben Williams

まあ、このスクリプトは私のために働いた:

# Apache2 - http server
#
# Apache is a web server that responds to HTTP and HTTPS requests.
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog

description "Apache2 http server"

start on runlevel [2345]
stop on runlevel [!2345]

pre-start script
    mkdir -p /var/run/Apache2 || true
    install -d -o www-data /var/lock/Apache2 || true
    # ssl_scache shouldn't be here if we're just starting up.
    # (this is bad if there are several Apache2 instances running)
    rm -f /var/run/Apache2/*ssl_scache* || true
end script

limit cpu 300 300
env Apache_RUN_USER=www-data
env Apache_RUN_GROUP=www-data
env Apache_PID_FILE=/var/run/Apache2.pid

# Give up if restart occurs 10 times in 30 seconds.
respawn limit 10 30

exec /usr/sbin/Apache2 -D NO_DETACH
respawn
5
tmueko

私もこの問題に遭遇しましたが、別のアプローチを使用しました。 env変数を取得する最も簡単な方法は、sourceコマンドを使用してApache envvarsファイルを指定することです。その後、-D FOREGROUNDオプションを使用してApacheを実行できます。

したがって、基本的には次のようなスクリプトが必要です(私のものは/etc/Apache2/Apache2_foreground.shにあります):

#!/bin/bash

read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat
trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL SIGTERM SIGQUIT


source /etc/httpd/envvars
Apache2 -D FOREGROUND

次に、それを実行可能にし、スーパーバイザーをその場所に向けます。また、stopsignal 6を使用する必要があります。

command=/etc/Apache2/Apache2_foreground.sh
stopsignal=6

スクリプトの最初の2行は、スクリプトのプロセスグループIDをキャッチし、プロセスに渡されるシグナルで実行されるトラップを設定します。このトラップは、すべてのApache2プロセスを実行する親の負のプロセスID(スクリプトそれ自体)-負のPIDで殺すことは、そのようなプロセスのすべての子も殺すことを意味します(したがって、この場合はすべてのApache2プロセス)、それなしでスーパーバイザーにApache2プロセスを殺すことはできませんでした

ストップシグナル6は、トラップを呼び出すことができる他の信号を見つけることができず、9はキャッチできず、2と3は何もしない(スクリプトは強制終了されない)ために使用されます。

その後、Apache2の構成をまったく変更せずに、スムーズに動作するはずです。

3
Roman Buczynski

スコットジェームスレムナントからのトピックに関するいくつかの投稿を参考にしてください。

2
8128

Ben Williams's のようなアプローチを使用しますが、-D FOREGROUNDの代わりに-D NO_DETACHを使用します。

0
isoma

ああ、はい、通常、答えは「自分で書いてください」ですので、それに応じて私の典型的な提案は、 Getting Started-upstart pageを参照し、入力します。

この問題について、私よりも知識のある人が、実用的なスタートアップスクリプトを思いつくことを願っています。

0