如何使用 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 个实例去?
您可以通过指定 numprocs
和 process_name
来实现,例如:
numprocs = 3
process_name = %(program_name)s_%(process_num)02d
除非您想从零开始计算您的进程,否则您还应该指定 numprocs_start
变量:
numprocs_start = 1
您的应用程序是否侦听端口?如果是这样,这里有一个示例,说明如何保留网络应用程序的四个实例 运行(在本例中,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)
是代表端口的变量。
我对 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 个实例去?
您可以通过指定 numprocs
和 process_name
来实现,例如:
numprocs = 3
process_name = %(program_name)s_%(process_num)02d
除非您想从零开始计算您的进程,否则您还应该指定 numprocs_start
变量:
numprocs_start = 1
您的应用程序是否侦听端口?如果是这样,这里有一个示例,说明如何保留网络应用程序的四个实例 运行(在本例中,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)
是代表端口的变量。