supervisord でプロセスを管理しようとしていますが、プロセスにはフォアグラウンドで実行するオプションがありません。常にデーモン化します。 (これはZabbixサーバーです)。
スーパーバイザでデーモンを管理する方法はありますか?フォアグラウンドで実行するツールはありますか?あるいは、pidfileをどうにかして使用しますか?
この問題に対処するには、フォアグラウンドで実行されるプログラムが必要です。このプログラムは、デーモンが終了するたびに終了し、デーモンへのシグナルもプロキシします。
次のスクリプト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
誰かが私と同じように検索エンジンを使用してこの質問に出くわした場合に備えて。
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
ではごきげんよう
私が使う fg process-name
supervisor docs のようにフォアグラウンドに切り替えます