Re: [問題] 如何讓程式同時只能跑一隻
感謝k大提供想法
本來我也想到類似apache等daemon的作法
放PID file在/var/run裡來做檢查
不過我已用os.popen來執行ps實作了
但覺得奇怪的是,直接執行運作很成功
可是放進cron裡就無法成功
節錄部份的code
有興趣的大大可以一起研究看看 ^^
#This is test.py
#!/usr/bin/env python
import os, socket, time, StringIO, commands, readline, re
check_process_cmd = '/bin/ps aux | /bin/grep python | /bin/grep test.py
(接上行) | /bin/grep -v /bin/sh | /bin/grep -v grep'
check_process = os.popen(check_process_cmd).readlines()
##上面可以找到用ps找到process python在跑的test.py
print len(check_process)
print check_process
process_log = ('%s\n,%s\n' % (len(check_process), check_process))
print process_log
check_process_file = file('/tmp/process_log.txt', 'a')
check_process_file.write(process_log)
check_process_file.close()
##上面是我為了偵測cehck_process會不會正常的run所做到log
##會印在螢幕上印出ps找到的行數和內容並寫到/tmp/process_log.txt
if len(check_process) < 1:
##如果剛剛ps找到的訊息行數小於1,才開始進行程式的主體
##到這邊在真的開始進行程式主體 (略)
else:
print('\33[1;31;40m\'test.py\' is already running now !\33[0m')
##程式結束
##若是剛剛的ps找到的訊息行數不是 <1 (已經有process了)
##則印出訊息
上面這部份直接執行都很正常
但放到cron裡只會印出:
0
,[]
並再開一隻起來跑…
※ 引述《Rhinocero (愛火快滅了)》之銘言:
: 標題: [問題] 如何讓程式同時只能跑一隻
: 時間: Thu Jul 26 03:26:32 2012
:
:
: 各位大大好
: 小的拿Python來寫程式
: 目前遇到一個問題
:
: 平台為Linux
: 因為有支程式想讓它用無限迴圈一直執行
: 定時跑出小的想要的東西
:
: 為避免程式process消失(當機 or 重開機 or kill程式…等)
: 會在cron table設定每分鐘 or 每5分鐘執行一次
:
: 所以在程式的開頭會做個檢查
: 要是已在執行,就跳出
:
: 可否請各位大大指點一下
: 用什麼方法實作比較好呢?
:
: 小的目前是用os.popen呼叫ps來實作
: 直接執行第二支程式會成功檢查已有第一支存在
: 秀訊息,並跳出 (yeah 成功)
:
: 可是放進cron的話似乎就沒有作用
: 一堆時間後用ps就可以看到一堆程式在跑… /_\
:
: 再煩請各位大大指點一下了
:
: 謝謝各位
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 36.224.41.9
: → kdjf:放pid到/var/run裡,新的程式直接檢查那個pid還在不在 07/26 07:48
: → Rhinocero:大大的想法很好,我之前也有看到這方式,不過 07/26 17:14
: → Rhinocero:另外回文好了XD 07/26 17:14
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.224.50.87
推
07/27 01:26, , 1F
07/27 01:26, 1F
→
07/27 01:29, , 2F
07/27 01:29, 2F
→
07/27 04:51, , 3F
07/27 04:51, 3F
→
07/27 04:52, , 4F
07/27 04:52, 4F
推
07/27 11:50, , 5F
07/27 11:50, 5F
推
07/28 18:34, , 6F
07/28 18:34, 6F
推
07/29 03:53, , 7F
07/29 03:53, 7F
推
08/01 21:29, , 8F
08/01 21:29, 8F
推
08/01 23:41, , 9F
08/01 23:41, 9F
討論串 (同標題文章)