apache2 で外部書き換えプログラム (prg) を使用して書き換えマップを実行していますが、エラーが発生して終了する可能性があります。書き換えマップが実行されていない場合、システムは明らかに適切に機能しません。
そこで、マップ プログラム (php で記述) を実行し、終了した場合に再起動する単純なラッパー シェル スクリプトを開始したいと考えました。
#!/bin/bash
until /usr/bin/php /somepath/mymap.php; do
echo "map died but i will restart it right away!"
done
シェルで手動で試してみると問題なく動作しますが、Web サーバーで起動すると動作しません。
...そして、stdin および stdout ファイルハンドルを介して書き換えエンジンと通信します。マップ関数の検索ごとに、標準入力の改行で終了する文字列として検索するためのキーを受け取ります。次に、検索された値を stdout の改行で終了する文字列として返すか、失敗した場合は 4 文字の文字列 ``NULL'' を返さなければなりません...
その理由は私にはかなり明確に思えます。最初のスクリプトは stdin を受け取りますが、sub スクリプトにリダイレクトしません。
execどうにかして、スクリプトの stdin/stdout を使用して記述子を定義し、適切にリダイレクトする必要があると思います。しかし、どうすればそれを行うことができますか?