使用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)
问题是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)
| 归档时间: |
|
| 查看次数: |
8243 次 |
| 最近记录: |