このコマンドセット(サーバーの再起動)をどのように簡単に作成できますか?

このコマンドセット(サーバーの再起動)をどのように簡単に作成できますか?

私はDebian JessieサーバーでNginx、FCGI、およびRequest Trackerを実行しています。 Request TrackerはNginxから提供されていますが、FCGIはその間にあります。重要なことは、FCGIサーバーが時々失敗し、RTユーザーに502エラーが表示されることです。修正は簡単ですが、過去1ヶ月間何度もやってみたからです。私が席を空けたときに他の人がFCGIサーバーを再起動する必要がある場合は、問題が発生する可能性があります。そしてサーバーを停止して再起動するのも面倒ですが、変更をRTに適用するには必ずやらなければならない作業です。

これらすべてが私に次の結論をもたらします。どうすればコマンドをより簡単にすることができますか?スクリプト?サービスなのでに存在しますか/etc/init.d?他に何かありますか?私はDebianとLinuxに初めて触れたので、私が選択できるオプションや各オプションの参加レベルについてはわかりません。実行する必要があるコマンドは次のとおりです。

netstat -antp | grep LIST | grep 12345

(これは、PIDを取得するためにポート12345にバインドされたFCGIサーバーを探します。PIDが8091であるとします。)

kill 8091
spawn-fcgi -u someUser -g someGroup -a 127.0.0.1 -p 12345 /opt/rt4/sbin/rt-server.fcgi

ここで重要なのは、netstatコマンドが何も返すことができないことです。その場合、FCGIサーバーは自動的に失敗したため、このkillコマンドをスキップして直接実行できますspawn-fcgi。それ以外の場合は、killコマンドを保持してください。

理想的には、スタート/ストップ/再起動オプション(たとえば)を持ちたいです/etc/init.d/rt-fcgi-server。しかし、まずPIDを探す必要があるので、プロセスを終了する方法がわかりません。ファイルの使用を検討しましたが、ファイルを持っていてもどのように使用するように.pid指示するのか、そのようなファイルをどのようにすべきかわかりません。spawn-fcgiそれが私が望むことをするかどうかはわかりません(コマンドの使用を避けるためにPIDを維持してくださいnetstat)。

これらすべてが理解されることを願っています。私は基本的に/etc/init.dコマンドの結果を制御するコマンドまたはそれに関連するものが欲しいと思いますspawn-fcgi。私は、root以外のユーザー(私よりもLinuxについて知っている人)がログインして単一のコマンドを実行できるようにしたいと思いますnetstat。 。これにより、Monitなどの機能を使用してサーバーが失敗した場合に自動的に再起動できます。

答え1

私はこの答えをFreeBSDの観点から書くつもりですが、LinuxやDebianでも動作します...パッケージ名やその他のものは変更される可能性があります。

私もspawn-fcgiに満足していません。 FreeBSD には rc.d スクリプトがありますが、rc.d の規則に従わない (たとえば、「再起動」できません)。

ただし、spawn-fcgi マニュアルの下部には監督への言及があります。数回の検索の最後に「daemontools」を見つけました。 FreeBSDには、daemontoolsおよびdaemontools-encore用のパッケージがあります。 -アンコールは比較的新しいようで機能もより多くなって選択しました。私のdaemontools-encoreのバージョンは1.10_1です。

FreeBSDでは、svscan用のrc.dスクリプトが提供されています。 FreeBSD では、/var/service のサブディレクトリを検索し、各ディレクトリに対して "watch" を実行します。私はこのデフォルト設定を受け入れて/etc/rc.confに入れましたsvscan_enable="YES"。 Linuxでは、rcスクリプトについてはわかりませんが、/serviceがデフォルトのディレクトリであることがわかります。

/var/serviceの内部でrt-fcgiを生成し、rt-fcgiの内部でrunを生成しました。 「実行」には以下が含まれます。

#!/bin/sh

spawn-fcgi -u www -g www -s /tmp/rt.sock -n -- /usr/local/sbin/rt-server.fcgi

明らかに、Linuxでは、使用しているユーザーとグループとrt-server.fcgiの場所が必要です。

svscanシステムは、プロセスヘッダの最後の数行にエラーがあることを知らせているようです。他のオプションがあります。私の外観は次のとおりです。

46495  -  IJ   0:00.01 /usr/local/bin/readproctitle service errors: ...tory (/var/run/rt44/data/gpg). GnuPG support has been disabled (/usr/local/lib/perl5/site_perl/RT/Config.pm:790)\n[52465] [Tue Mar  7 21:09:54 2017] [warning]: The requested port (443) does NOT match the configured WebPort (80).  Perhaps you should Set($WebPort, 443); in RT_SiteConfig.pm, otherwise your internal hyperlinks may be broken. (/usr/local/lib/perl5/site_perl/RT/Interface/Web.pm:1328)\n

...これはgnupgが正しく設定されていないことを意味します。 svscanのロギングを設定しない限り、エラーや何かを探しているようです。

これはfcgiの場合はかなり退屈な作業ですが、カプセル化されて動作します。何らかの理由で終了するスクリプトを処理しますが、PIDファイルやソケットを管理しません(ソケットファイルの生成を除く)。

私はこの混乱した標準よりもWSGI標準を好むと言わなければなりません。

関連情報