MCPcopy Create free account
hub / github.com/ZyphrZero/palworld-python-script / polling_task

Method polling_task

src/task_scheduler.py:339–423  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

337
338 # 轮询任务(固定延迟执行)
339 def polling_task(self):
340 while True:
341 # 经测试等于1分钟时原版RCON会出现timeout
342 if self.restart_interval < 60:
343 INFO.logger.error("[ 轮询任务 ] 服务器重启时间 restart_interval 必须大于1分钟,请重新设置!")
344 print("[ 轮询任务 ] 服务器重启时间 restart_interval 必须大于1分钟,请重新设置!")
345 time.sleep(2)
346 sys.exit(0)
347
348 # 启动程序前检查, 如果存在服务端则不再进行启动操作,改为每次循环结尾关闭进程
349 is_running = self.is_palserver_running()
350 INFO.logger.info(f"[ 轮询任务 ] 当前 PalServer 进程运行状态:{is_running}")
351 if not is_running and (not self.is_restarting):
352 INFO.logger.info("[ 前置检查 ] 未检测到 PalServer 服务,正在启动......")
353 print("[ 前置检查 ] 未检测到 PalServer 服务,正在启动......")
354 self.start_program()
355
356 INFO.logger.info(f'[ 轮询任务 ] 服务器将进入重启倒计时,设置时长为 {self.conf["restart_interval"]} 秒......')
357 print(f'\r[ 轮询任务 ] 服务器将进入重启倒计时,设置时长为 {self.conf["restart_interval"]} 秒......')
358
359 # 服务器持续运行时间(重启间隔)
360 for i in range(int(self.restart_interval), 0, -1):
361 print("\r\033[K", end='') # 清除当前行
362 print(f'\r[ 轮询任务 ] 服务器将在 {i} 秒后重启......', end='')
363 time.sleep(1)
364 # 检查内存使用情况
365 if self.memory_monitor_enabled:
366 if self.polling_interval_seconds > 5:
367 mem_info = psutil.virtual_memory()
368 mem_usage = mem_info.percent # 获取内存使用百分比
369
370 # 内存超限关服消息提醒
371 if mem_usage > self.memory_usage_threshold:
372 self.is_restarting = True # 开始重启
373 max_notice_time = max(map(int, self.shutdown_notice.keys())) # 获取最大关服通知时间
374 INFO.logger.error(
375 f"[ 内存监控 ] 内存使用超过{self.memory_usage_threshold}%,正在重启程序......")
376 print(f"\r[ 内存监控 ] 内存使用超过{self.memory_usage_threshold}%,正在重启程序......")
377 time.sleep(1)
378 # 倒计时关闭服务端
379 for j in range(max_notice_time, 0, -1):
380 time.sleep(1)
381 self.send_shutdown_notice(j)
382 # 关服之前执行一次SAVE
383 if self.rcon_enabled:
384 success, response = self.send_rcon_command("Save")
385 if success:
386 INFO.logger.info('[ RCON ] 存档已保存 {0}'.format(response))
387 print('\r[ RCON ] 存档已保存', response)
388 time.sleep(3)
389 else:
390 INFO.logger.error('[ RCON ] 存档保存失败: {0}'.format(response))
391 self.close_process()
392 self.is_first_run = True
393 time.sleep(5)
394 self.start_program()
395 self.is_restarting = False # 重启完成
396

Callers

nothing calls this directly

Calls 5

is_palserver_runningMethod · 0.95
start_programMethod · 0.95
send_shutdown_noticeMethod · 0.95
send_rcon_commandMethod · 0.95
close_processMethod · 0.95

Tested by

no test coverage detected