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

Nag*_*rla 2 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
Run Code Online (Sandbox Code Playgroud)

los*_*der 5

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

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

command=/bin/sh -c "touch ~a.c && tail -f /dev/null"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 您可能希望在最后的命令前加上 `exec`,这样 shell 进程将被替换,而 supervisor 将管理您正在运行的实际程序。 (2认同)