如何使用 Supervisord 管理多个 Clojure 应用程序的自动重启?

How to manage automatic restarts of multiple Clojure apps with Supervisord?

我对 Supervisord 没有任何经验。如果我看这里:

https://tgallant.github.io/clojure/supervisord-with-clojure.html

我看到了这个使用 Supervisord 管理 Clojure 应用程序的示例:

[program:blog-checker]
command= /usr/local/bin/java -jar target/blog-checker-0.1.0-SNAPSHOT-standalone.jar
directory=/usr/local/www/blog-checker
autostart=true
autorestart=true
startretries=3
user=www

如果我想使用 Supervisord 来保留我的应用程序的 3 个实例 运行,我是创建 3 个单独的条目,还是有办法只保留一个条目,但告诉它保留 3 个实例去?

您可以通过指定 numprocsprocess_name 来实现,例如:

numprocs = 3
process_name = %(program_name)s_%(process_num)02d

除非您想从零开始计算您的进程,否则您还应该指定 numprocs_start 变量:

numprocs_start = 1

You could find complete supervisor documentation here.

您的应用程序是否侦听端口?如果是这样,这里有一个示例,说明如何保留网络应用程序的四个实例 运行(在本例中,ApiAxle 的 API):

[program:apiaxle-api]
process_name = apiaxle-api-%(process_num)s
command = apiaxle-api -f 1 -p %(process_num)s
directory = /home/apiaxle/apiaxle/api
numprocs = 4
numprocs_start = 3000
user=apiaxle
redirect_stderr=true
stdout_logfile=/var/log/apiaxle/api-%(process_num)s-stdout.log
stderr_logfile=/var/log/apiaxle/api-%(process_num)s-stderr.log

四个实例监听端口3000、3001、3002和3003。$(process_num)是代表端口的变量。