refactor: 使用假端口实现调度器单例控制
- 恢复 agentmain.py 到原始状态 - launch.pyw 使用端口 65432 检测单例 - 避免重复启动调度器实例
This commit is contained in:
16
launch.pyw
16
launch.pyw
@@ -92,9 +92,19 @@ if __name__ == '__main__':
|
||||
else: print('[Launch] Telegram Bot disabled (--no-tg)')
|
||||
|
||||
if not args.no_scheduler:
|
||||
scheduler_proc = subprocess.Popen([sys.executable, "agentmain.py"], creationflags=subprocess.CREATE_NO_WINDOW if os.name=='nt' else 0)
|
||||
atexit.register(scheduler_proc.kill)
|
||||
print('[Launch] Task Scheduler started')
|
||||
# 使用假端口检测单例
|
||||
import socket
|
||||
scheduler_port = 65432
|
||||
try:
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.bind(('127.0.0.1', scheduler_port))
|
||||
sock.listen(1)
|
||||
# 绑定成功,启动调度器
|
||||
scheduler_proc = subprocess.Popen([sys.executable, "agentmain.py"], creationflags=subprocess.CREATE_NO_WINDOW if os.name=='nt' else 0)
|
||||
atexit.register(lambda: (scheduler_proc.kill(), sock.close()))
|
||||
print('[Launch] Task Scheduler started')
|
||||
except OSError:
|
||||
print('[Launch] Task Scheduler already running (port occupied)')
|
||||
else: print('[Launch] Task Scheduler disabled (--no-scheduler)')
|
||||
|
||||
monitor_thread = threading.Thread(target=idle_monitor, daemon=True)
|
||||
|
||||
Reference in New Issue
Block a user