web-dev-qa-db-ja.com

スーパーバイザによるデーモンの管理:フォアグラウンドモードは使用できません

supervisord でプロセスを管理しようとしていますが、プロセスにはフォアグラウンドで実行するオプションがありません。常にデーモン化します。 (これはZabbixサーバーです)。

スーパーバイザでデーモンを管理する方法はありますか?フォアグラウンドで実行するツールはありますか?あるいは、pidfileをどうにかして使用しますか?

7
kolypto

この問題に対処するには、フォアグラウンドで実行されるプログラムが必要です。このプログラムは、デーモンが終了するたびに終了し、デーモンへのシグナルもプロキシします。

次のスクリプトbashスクリプトの使用を検討してください。

#! /usr/bin/env bash
set -eu

pidfile="/var/run/your-daemon.pid"
command=/usr/sbin/your-daemon

# Proxy signals
function kill_app(){
    kill $(cat $pidfile)
    exit 0 # exit okay
}
trap "kill_app" SIGINT SIGTERM

# Launch daemon
$command
sleep 2

# Loop while the pidfile and the process exist
while [ -f $pidfile ] && kill -0 $(cat $pidfile) ; do
    sleep 0.5
done
exit 1000 # exit unexpected
13
kolypto

誰かが私と同じように検索エンジンを使用してこの質問に出くわした場合に備えて。

Zabbixはv3.0.0beta1以降、フォアグラウンドで実行するための「-f」オプションを提供しています( https://support.zabbix.com/browse/ZBXNEXT-611

以下に示すように、バイナリへの絶対パス(ソースからコンパイル)を使用してプロセスを開始し、「-c」スイッチを使用して構成ファイルと構成ファイルへの絶対パスを提供します。次に、前述の「-f」スイッチを使用して、プロセスをフォアグラウンドで実行します。

使用する監視構成ファイルは次のようになります。


[program:zabbix-server]
command=/opt/application/zabbix-server/3.2.7/zabbix_server -c /opt/application/zabbix-server/3.2.7/zabbix-server.conf -f

startsecs=5
startretries=3

autostart=true
autorestart=true

user=zabbix

stdout_logfile=/data/application/zabbix-server/3.2.7/log/zabbix-server.log
stderr_logfile=/data/application/zabbix-server/3.2.7/log/zabbix-server-stderr.log

Zabbix-server.confで設定したことに注意してください


LogType=console

ではごきげんよう

2
MrOppermann

私が使う fg process-namesupervisor docs のようにフォアグラウンドに切り替えます

0
mistbow