用 Python 管理系統進程
點擊上方
「
Python開發
」,選擇「置頂公眾號」
關鍵時刻,第一時間送達!
Supervisor 可以啟動、停止、重啟 * nix 系統中的程序。也可以重啟崩潰的程序。
supervisord 的一個守護進程,用於將指定的進程當做子進程來運行。
supervisorctl 是一個客戶端程序,可以查看日誌並通過統一的會話來控制進程。
看例子:
我們寫了一個 py 腳本,用於往 log 文件中記錄一條當前的時間。
root@ubuntu
:/
home
/
zoer
# cat daemon.py
#!/usr/bin/env python
import
time
import
os
time
.
sleep
(
1
)
f
=
open
(
"log"
,
"a"
)
t
=
time
.
time
()
f
.
write
(
str
(
t
))
f
.
write
(
"
")
f
.
close
()
安裝過程就不說了。
安裝完畢supervisor之後【將配置文件放在/etc下】。修改配置文件,在最後增加如下內容:
[
program
:
ddd
]
command
=
/home/
zoer
/
daemon
.
py
autorestart
=
true
然後我們啟動 supervisor 並啟動 daemon.py 的執行。
root@ubuntu
:/
home
/
zoer
# supervisord
/
usr
/
local
/
lib
/
python2
.
7
/
dist
-
packages
/
supervisor
-
3.0b1
-
py2
.
7.egg
/
supervisor
/
options
.
py
:
286
:
UserWarning
:
Supervisord
is
running
as
root
and
it
is
searching
for
its configuration file
in
default locations
(
including its current working directory
)
you probably want to specify a
"-c"
argument specifying an absolute path to a configuration file
for
improved security
.
"Supervisord is running as root and it is searching "
root@ubuntu
:/
home
/
zoer
# supervisorctl
ddd STARTING
supervisor
>
start ddd
ddd
:
ERROR
(
already started
)
supervisor
>
stop ddd
ddd
:
stopped
supervisor
>
start ddd
ddd
:
started
supervisor
>
從上面的例子中,看到,可以通過 start 或者 stop 命令來啟動或者停止 ddd 這個進程。 ddd 這裡就是我們在配置文件中增加的內容( daemon.py 這個腳本)。
也可以使用 restart 。如下:
supervisor
>
restart ddd
ddd
:
stopped
ddd
:
started
下面我們測試一下,假設說我們手動 kill 掉了 ddd 這個進程,那麼 ddd 會自動恢復執行嗎?
為了做實驗,把代碼修改如下:
root@ubuntu
:/
home
/
zoer
# cat daemon.py
#!/usr/bin/env python
import
time
import
os
while
True
:
time
.
sleep
(
1
)
f
=
open
(
"log"
,
"a"
)
t
=
time
.
time
()
f
.
write
(
str
(
t
))
f
.
write
(
"
")
f
.
close
()
通過 ps 可以找到這個進程的 id :
root
9354
0.2
0.4
10924
4200
?
S
23
:
16
0
:
00
python
/
home
/
zoer
/
daemon
.
py
root
9395
0.0
0.0
4392
832
pts
/
3
S
+
23
:
17
0
:
00
grep
--
color
=
auto daemon
root@ubuntu
:/
home
/
zoer
看下面的操作:
root@ubuntu
:/
home
/
zoer
# rm log;touch log;kill 9354
root@ubuntu
:/
home
/
zoer
# cat log
1364710712.51
root@ubuntu
:/
home
/
zoer
# cat log
1364710712.51
1364710713.51
root@ubuntu
:/
home
/
zoer
# cat log
1364710712.51
1364710713.51
root@ubuntu
:/
home
/
zoer
# cat log
1364710712.51
1364710713.51
1364710714.52
root@ubuntu
:/
home
/
zoer
# cat log
1364710712.51
1364710713.51
1364710714.52
1364710715.52
刪除了 log 文件,並且重新創建。然後幹掉了 daemon.py 的那個進程。會發現 log 內容又重新有新的內容了。再次 ps 查看進程號。
root
9429
0.1
0.4
10924
4200
?
S
23
:
18
0
:
00
python
/
home
/
zoer
/
daemon
.
py
root
9440
0.0
0.0
4392
828
pts
/
3
S
+
23
:
19
0
:
00
grep
--
color
=
auto daemon
root@ubuntu
:/
home
/
zoer
會發現進程號已經變成9429了。說明 supervisor 已經重啟了被幹掉了的進程。
作者:imzoer@blog.csdn.net
Python開發整理髮布,轉載請聯繫作者獲得授權
【點擊成為Java大神】


※Python 標準庫之 collections 使用教程
※如何開發一個基於 Docker 的 Python 應用
TAG:Python開發 |