2016-03-13 189 views
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 

回答

4

的問題是,主管未運行的殼來解釋command sections,所以「& &」只是它被傳遞給touch命令5個空格分隔參數之一;如果這成功運行,那麼現在應該在其工作目錄中有一些不尋常的文件名。

您可以使用一個shell作爲命令,並通過它的外殼邏輯,你想:

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

通常情況下,這種類型的外殼包裝應的接口由應用提供和管理,並且什麼supervisord和其他人只是知道如何呼叫路徑和選項,即:

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

您可能要在前面加上'最後的命令exec',這樣shell進程將被替換,並且管理員將管理你正在運行的實際程序。 – gertvdijk

0

這是一個竅門。

您可以使用一個shell腳本做到這一點,除此之外

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

它可以在你script.sh

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

通知exec

相關問題