以下supervisor的進程的comand配置參數只能寫一個命令java
一、要執行多條命令,能夠寫個sh文件包含多條命令,而後sh -x xxxx.sh,但這樣又多了一個文件,python
二、把全部命令放在字符串,而後用eval來執行,這樣在shell窗口能夠執行,但放在supervisor報找不到eval命令。好比:git
command = eval "python -u app/utils_ydf/git_client.py&&gunicorn -w 9 -k gevent --bind 0.0.0.0:5402 app.apis.elong.nearby_hotel:app" 這樣不能在supervisor運行。
三、解決方式是使用以下:shell
command = /bin/bash -c "python -u app/utils_ydf/git_client.py&&gunicorn -w 9 -k gevent --bind 0.0.0.0:5402 app.apis.elong.nearby_hotel:app"
這樣就能夠了。
這樣每次在啓動或重啓進程時候,會先拉去git再部署,部署速度比jenkens的構建速度快,狀態也比jenkens查看方便。
這樣運行是要注意下環境變量問題,好比用python的git包時候,讀取不了git的路徑竟然,最後是在配置的enviroment設置GIT_PYTHON_GIT_EXECUTABLE="/usr/bin/git才解決,但單獨運行又能讀取git。
四、command用bash -c 啓動 python xx.py必定要設置以下爲true,不然stop不了真正的python/java進程,由於bash命令進程和真正的python進程不是同一個。 若是是command=python xx.py這樣,而且程序裏面沒有使用多進程,則無需設置如下。
stopasgroup = truekillasgroup = true