次のシステムを使用しています。
Ubuntu 18.04.2 LTS
bash 4.4.19(1)-release
監視付き3.3.1-1.1
CLIからかなりうまく機能する2つのスクリプトを作成しましたが、それらを使って監視プログラムを使用しようとすると、機能しません。
それらを手動で実行すると、両方が存在するディレクトリフォルダーにcdし、コマンドを発行します。通常、私は2つの異なるsshセッションを行っており、1つのsshウィンドウで1つのコマンドを発行し、他のsshウィンドウで他のコマンドを発行しています。
root@LPRcloud:~/lpr-scripts# ./lpr-loader.sh
そして
root@LPRcloud:~/lpr-scripts# ./file-minder.sh -s /home/ -d /home/rslsync/lpr-sync/ -e /home/rslsync -T
/etc/supervisor/supervisord.confにスーパーバイザを設定し、このディレクティブを下部に配置します。
files = /etc/supervisor/conf.d/*.conf
次のファイルをディレクトリに配置しました。
/etc/supervisor/conf.d/lpr-loader.conf
そのファイルの関連する行は次のとおりです。
[program:lpr-loader]
command=bash -c "/root/lpr-scripts/lpr-loader.sh" ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1 ; number of processes copies to start (def 1)
[program:file-minder]
command=bash -c "/root/lpr-scripts/file-minder.sh -s /home/ -d /home/rslsync/lpr-sync/ -e /home/rslsync" ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1 ; number of processes copies to start (def 1)
Lpr-loader.confファイルに変更を加えた後、これらのコマンドを次の順序で実行します。
root@LPRcloud:~/lpr-scripts# supervisorctl reread
file-minder: available
root@LPRcloud:~/lpr-scripts# supervisorctl status all
lpr-loader RUNNING pid 6173, uptime 5:49:11
root@LPRcloud:~/lpr-scripts# service supervisor stop
root@LPRcloud:~/lpr-scripts# service supervisor start
root@LPRcloud:~/lpr-scripts# supervisorctl status all
file-minder RUNNING pid 91580, uptime 0:00:02
lpr-loader RUNNING pid 91581, uptime 0:00:02
root@LPRcloud:~/lpr-scripts# supervisorctl status all
file-minder RUNNING pid 91580, uptime 0:00:06
lpr-loader RUNNING pid 91581, uptime 0:00:06
したがって、lpr-loaderとfile-minderの両方が実行されているはずです。私もこれらの1つを引っ張る:
root@LPRcloud:~/lpr-scripts# ps aux | egrep 'lpr|minder'
root 15492 0.0 0.0 16948 1008 pts/0 S+ 23:40 0:00 grep -E --color=auto lpr|minder
root 91580 0.0 0.0 23860 3648 ? S 23:38 0:00 /bin/bash /root/lpr-scripts/file-minder.sh -s /home/ -d /home/rslsync/lpr-sync/ -e /home/rslsync
root 91581 14.0 0.0 23988 3704 ? S 23:38 0:20 /bin/bash /root/lpr-scripts/lpr-loader.sh
しかし、スクリプトはバックグラウンドで機能していません。また、これらのスクリプトを手動で実行すると、正しく動作します。
ここで何が悪いのですか?
Lpr-loader.confで使用できる/すべきPATHディレクティブがあり、スーパーバイザに必要な作業ディレクトリを通知しますか?
以下のコメントからの提案を実装した後、file-minderが正しく機能するようになりましたが、lpr-loaderが機能していません。 supervisorctlのステータスはすべてRUNNINGと表示していますが、ファイルやデータベースに変化はありません。スーパーバイザが実行しているログで、何が起こっているのかを知るために使用できるものはありますか?
ちなみに私はスーパーバイザーで環境指令を調べました。 conf.dの[program:lpr-loader]セクションに追加しましたが、役に立たなかったようです。 (または痛い!)
異なるディレクトリにあるファイル間の同期を維持しようとしているようです。スクリプトに必要な無限ループがありますか?
基本的なスクリプトでデバッグして、問題がsupervisord
のスクリプトにあるかどうかを確認することをお勧めします。例:
while true; do echo "test" >> /tmp/test.log; sleep 5; done
このジョブで特定の作業ディレクトリを使用するように、supervisordを構成する必要がある可能性があります。
プログラムセクションのスーパーバイザードキュメント で構成可能なdirectory
(および場合によってはenvironment
)を参照してください