十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
一, 簡(jiǎn)介
Dockerfile 運(yùn)行只支持一條命令,當(dāng)在Docker里要運(yùn)行多條命令,用supervisor來(lái)管理就比較合適了。
Supervisor是一個(gè) Python 開發(fā)的 client/server 系統(tǒng),可以管理和監(jiān)控類 UNIX 操作系統(tǒng)上面的進(jìn)程。它可以同時(shí)啟動(dòng),關(guān)閉多個(gè)進(jìn)程,使用起來(lái)特別的方便。
組成部分
supervisor 主要由兩部分組成:
supervisord(server 部分):主要負(fù)責(zé)管理子進(jìn)程,響應(yīng)客戶端命令以及日志的輸出等;
supervisorctl(client 部分):命令行客戶端,用戶可以通過(guò)它與不同的 supervisord 進(jìn)程聯(lián)系,獲取子進(jìn)程的狀態(tài)等。
二,存在的問(wèn)題——日志不輸出
但是使用supervisor,Django運(yùn)行的日志就不會(huì)在Docker里輸出了,默認(rèn)的輸出如下:
2018-03-28 06:48:20,292 CRIT Supervisor running as root (no user in config file)
2018-03-28 06:48:20,308 INFO supervisord started with pid 1
2018-03-28 06:48:21,310 INFO spawned: 'celery_beat' with pid 7
2018-03-28 06:48:21,312 INFO spawned: 'celery_worker' with pid 8
2018-03-28 06:48:21,313 INFO spawned: 'django' with pid 9
2018-03-28 06:48:22,315 INFO success: celery_beat entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2018-03-28 06:48:22,315 INFO success: celery_worker entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2018-03-28 06:48:22,315 INFO success: django entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
上面的Docker中supervisor配置如下:
[supervisord] nodaemon=true [program:django] command=python manage.py runserver 0.0.0.0:8080 [program:celery_worker] command=python manage.py celery worker -c 4 -l info [program:celery_beat] command=python manage.py celery beat