是否可以使用 supervisord 调用 bash shell 脚本?

Is it possible to call a bash shell script using supervisord?

我正在尝试使用 supervisord 调用 this shell script。 supervisorctl 尝试启动进程时报如下错误:

kerby-kdc FATAL Exited too quickly (process log may have details)

我检查了 kerby 日志,但没有报告错误。

我在/etc/supervisor/supervisord.conf中配置的流程如下:

[program:kerby-kdc]
command=bash -c "/home/test/kerberos/server/kdc-dist/bin/start-kdc.sh" /home/test/kerberos/server/kdc-dist/conf /home/test/kerberos/server/kdc-dist/runtime
user=test
environment=JAVA_HOME="/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin"
autostart=true
autorestart=true
startsecs=10
startretries=3

这个配置有问题吗?

OP 中引用的 shell 脚本包含以下内容:

java $DEBUG \
-classpath target/lib/*:. \
-DKERBY_LOGFILE=kdc \
org.apache.kerby.kerberos.kdc.KerbyKdcServer -start $args

请注意,class路径是相对的。当 supervisord 尝试执行 java 命令时,JVM 将无法找到 class org.apache.kerby.kerberos.kdc.KerbyKdcServer。那是因为 target/lib 相对于 supervisord 执行路径不存在。

class路径需要是绝对路径,或者需要将 CLASSPATH 环境变量添加到 supervisord.conf 文件。