Supervisord-在启动应用程序/程序之前执行命令

时间:2016-03-13 06:43:32

标签: supervisord

使用supervisord,如何在运行程序之前执行命令?

例如,在下面的代码中,我想在启动程序之前创建一个文件。在下面的代码中,我使用tail -f / dev / null来模拟后台进程,但这可能是任何正在运行的程序,如' / path / to / application'。 我试过'&&'这似乎不起作用。要求是必须首先创建文件才能使应用程序正常工作。

[supervisord]
nodaemon=true
logfile=~/supervisord.log

[program:app]
command:touch ~a.c && tail -f /dev/null

2 个答案:

答案 0 :(得分:5)

问题是主管没有运行shell来解释command sections,所以“&&”它只是传递给touch命令的5个空格分隔参数之一;如果这个成功运行,那么现在它的工作目录中应该有一些不寻常的文件名。

您可以使用shell作为命令,并将其传递给您想要的shell逻辑:

command=/bin/sh -c "touch ~a.c && tail -f /dev/null"

通常,这种类型的shell包装器应该是应用程序提供和管理的接口,并且是supervisord和其他人只知道如何使用路径和选项进行调用,即:

command=myappswrapper.sh ~a.c 
(where myappswrapper.sh is:)
#!/bin/sh
touch $1 && tail -f /dev/null

答案 1 :(得分:0)

这是一个技巧。

您使用shell脚本来执行此操作

[program:app]
command:sh /path/to/your/script.sh

这可以是你的script.sh

touch ~a.c 
exec tail -f /dev/null

请注意exec