自動重啟掛掉的python指令碼

2021-07-02 07:57:18 字數 3447 閱讀 8887

跑程式,因為記憶體問題或者其它blabla問題(總之不是**問題),程式可能會偶爾掛掉,我們又不能整天盯著程式,怎麼辦呢?寫個指令碼來檢查程式是否掛掉,如果掛掉就重啟,這是乙個不錯的想法,具體做法依作業系統而不同。

方法1

在linux下可以新建乙個名為run.sh的指令碼:

#!/bin/sh

while [ 1 ]; do

python program.py --params

done

在命令列中這樣啟動:

sh run.sh
其中program.py是要執行的python指令碼,–params是引數。

在windows下可以類似地建個bat檔案,由於bat不太熟,所以這部分就先空著。

方法2

在python中增加一些額外檢查異常的**,如果發生異常,就重新執行,這裡用的是遞迴的方法。下面的例子中,我設定count最大為3,為了避免無限遞迴下去。

import time

count = 0

defcompute_number

():for i in xrange(10):

print

'count number: %s' % str(i+1)

time.sleep(1)

raise exception("a", "b")

defmain

():print

"autores is starting"

print

"respawning"

global count

if count < 3:

try:

count += 1

compute_number()

except exception, e:

print e

main()

finally:

print

'success'

if __name__ == "__main__":

main()

方法3
#!/usr/bin/env python

import os, sys, time

defmain

():print

"autores is starting"

executable = sys.executable

args = sys.argv[:]

args.insert(0, sys.executable)

time.sleep(1)

print

"respawning"

os.execvp(executable, args)

if __name__ == "__main__":

main()

多執行緒

另外還做了個多執行緒的小實驗,大家可以看看。

import time

from multiprocessing import pool

count = 0

defcompute_number

(num):

for i in xrange(3):

print

'current process = %s, count number: %s' % (str(num),str(i+1))

time.sleep(1)

raise exception("a", "b")

defmain

(num):

print

'********************'

print

"current process = %d" % num

print

"respawning"

global count

if count < 2:

try:

count += 1

compute_number(num)

except exception, e:

print e

main(num)

finally:

print

'success'

if __name__ == "__main__":

pool = pool(2)

pool.map(main,[1,2])

pool.close()

pool.join()

輸出如下:

********************

current process = 1

respawning

current process = 1, count number: 1

********************

current process = 2

respawning

current process = 2, count number: 1

current process = 1, count number: 2

current process = 2, count number: 2

current process = 1, count number: 3

current process = 2, count number: 3

('a', 'b')

********************

current process = 1

respawning

current process = 1, count number: 1

('a', 'b')

********************

current process = 2

respawning

current process = 2, count number: 1

current process = 1, count number: 2

current process = 2, count number: 2

current process = 1, count number: 3

current process = 2, count number: 3

('a', 'b')

********************

current process = 1

respawning

success

success

('a', 'b')

********************

current process = 2

respawning

success

success

Linux執行指令碼讓程序掛掉後自動重啟

1 建立迴圈監聽指令碼 autostart.sh 例 其中futures market server v3andwebsoket.jar 是要監聽的執行程式 bin bash while true docount ps ef futures market server v3andwebsoket.j...

shell指令碼 監控某個程序 掛掉重啟

指令碼monitor.sh bin sh file name home work restart.log 重啟指令碼的日誌,保證可寫入,保險一點執行 chmod 777 restart.log pid 0 proc num proc id 此處 sh home work run.sh 也替代為實際的...

liunx上專案掛掉,自動重啟腳步

由於專案佔記憶體比較大,其他專案和該專案一起執行到一定程度的時候,有時候會因為記憶體超過機器的承受,自動關閉 但是其他服務需要呼叫到這個服務,所以該專案不能關閉,這時候我們就要寫乙個指令碼自動重啟tomcat 原理是識別該服務 專案 的乙個,如果不能訪問到就重啟tomcat bin sh 獲取tom...