我對我的腳本有一些困難。目的是啓動一個或多個OpenVZ容器來執行一些測試。那些測試可能很長(通常約3小時)。我懷疑Popen超時沒有說
第一個劇本要這樣,排序隊列成員推出後,它的作用:
subprocess.Popen(QUEUE_EXECUTER % queue['queue_id'], shell=True)
其中「QUEUE_EXECUTER%隊列[‘queue_id’]」是完整的命令來運行。在queue_executer腳本它會是這樣的:
# Launching install
cmd = queue['cmd_install']
report_install = open(queue['report_install'], 'a')
process_install = subprocess.Popen(cmd, shell=True, stdout=report_install, stderr=subprocess.STDOUT)
process_install.wait()
# Launching test
logger.debug('Launching test')
report_test = open(queue['report_test'], 'a')
cmd = queue['cmd_test']
process_test = subprocess.Popen(cmd, shell=True, stdout=report_test, stderr=subprocess.STDOUT)
process_test.wait()
它工作的很好,但過一段時間,最近,大部分的時間,停止執行。沒有錯誤的日誌或任何東西。報告文件顯示它在一行的寫入過程中停止(我相信這是因爲該文件在python一側沒有正確關閉)。 在主機端,OOM殺手似乎沒有做任何事情,並且我搜索了主機的日誌而沒有發現任何東西。
上面推出的兩個「cmd」是基本上設置了vz的shell腳本,並在其上執行測試程序。
所以我的一個大問題是:我是否錯過了一些會導致腳本停止在Python端的東西?
謝謝。
編輯:一些補充信息。
失敗的命令總是第二個。下面是命令的兩個示例值我試圖執行:/path/vzspawncluster.sh /tmp/file web --tarball /services/pkgs/etch/releases/archive.tar.gz --create
和/path/vzlaunch.sh 172 -b trunk --args "-a -v -s --time --cluster --sql=qa3 --queue=223 --html [email protected]"
的vzlaunch腳本啓動與vzctl enter ID /path/script.py
一個OpenVZ的容器,其中ID是容器ID的python腳本和/path/script.py的腳本容器。
機器report_install和report_test是位於通過NFS共享訪問的另一臺計算機上的文件。這應該不重要,但由於我真的不知道失敗時發生了什麼,我仍然注意到它。
當它失敗時,容器上的進程死亡。它並不處於任何殭屍狀態或任何其他狀態,它只是死了。雖然容器上的進程失敗,但主進程(將所有進程啓動的進程)仍然繼續,好像一切都很好。
一些更多的信息: 我試過buffer-flushing approach通過SMCI指出,但我的日誌文件的寫作不斷被一條線的中間偏右的切割:
[18:55:27][Scripteo] Create process '/QA/valideo.trunk/tests/756/test.py -i 10.1.11.122 --report --verbose --name 756 --...
[18:56:35][Scripteo] Create process '/QA/valideo.trunk/tests/762/test.py -i 10.1.11.122 --report --verbose --name 762 --...
[18:57:56][Scripteo] Create process '/QA/valideo.trunk/tests/764/test.py -i 10.1.11.122 --report --verbose --name 764 --...
[18:59:27][Scripteo] Create process '/QA/valideo.trunk/tests/789/test.py -i 10.1.11.122 --report --verbose --name 789 --...
[19:00:44][Scripteo] Create process '/QA/valideo.trunk/tests/866/test.py -i 10.1.11.122 --report --verbose --name 866 --...
[19:02:27][Scripteo] Create process '/QA/valideo.trunk/tests/867/test.py -i 10.1.11.122 --report --verbose --name 867 --...
[19:04:13][Scripteo] Create process '/QA/valideo.trunk/tests/874/t
你是什麼意思_'The機report_install意味着和report_test位於不同的機器上的文件通過NFS共享訪問.'_你的意思是_files_在不同的機器,或_jobs_,或兩者兼而有之?你的意思是兩個作業在不同的機器上並行運行?爲什麼不在已知好的機器上運行這兩項工作?或者先嚐試運行失敗的人?我不清楚這兩個容器是否相互依賴。 – smci
我的腳本並不是唯一能夠產生這種類型的報告的人,這就是爲什麼他們通過NFS共享集中在遠程計算機上的原因。 (只有文件位於那裏,作業在本地機器上運行,通過遠程機器上的網絡寫入)。我把所有的日誌都移到了本地目錄,它似乎不再崩潰。儘管我只是治癒了sympthomes,但我仍然有這種感覺,但問題仍然存在。無論如何,感謝您的幫助! – jaes
好的,我建議你在OpenVZ上提交一個bug。 – smci