使用supervisord,如何在运行程序之前执行命令?
例如,在下面的代码中,我想在启动程序之前创建一个文件。在下面的代码中,我使用tail -f / dev / null来模拟后台进程,但这可能是任何正在运行的程序,如' / path / to / application'。 我试过'&&'这似乎不起作用。要求是必须首先创建文件才能使应用程序正常工作。
[supervisord]
nodaemon=true
logfile=~/supervisord.log
[program:app]
command:touch ~a.c && tail -f /dev/null
答案 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