Compare commits

...

3 Commits

Author SHA1 Message Date
xiaoQQya
bd9222c875
Merge 78581b15a7 into 956105c16e 2025-10-10 22:44:43 +08:00
ypq123456789
956105c16e
🐛 修复定时任务调度器卡死导致后续任务无法执行的问题 (#125)
Some checks failed
Docker Publish / build-and-push (push) Has been cancelled
2025-10-10 22:41:05 +08:00
xiaoQQya
78581b15a7 feat: 魔法变量 {E} 支持零填充格式化 2025-08-20 23:33:51 +08:00
2 changed files with 37 additions and 5 deletions

View File

@ -23,6 +23,7 @@ import subprocess
import requests
import hashlib
import logging
import traceback
import base64
import sys
import os
@ -470,7 +471,35 @@ def add_task():
# 定时任务执行的函数
def run_python(args):
logging.info(f">>> 定时运行任务")
os.system(f"{PYTHON_PATH} {args}")
try:
# 使用 subprocess 替代 os.system并设置超时时间默认30分钟
timeout = int(os.environ.get("TASK_TIMEOUT", "1800")) # 秒
result = subprocess.run(
f"{PYTHON_PATH} {args}",
shell=True,
timeout=timeout,
capture_output=True,
text=True,
encoding="utf-8",
errors="replace"
)
# 输出执行日志
if result.stdout:
for line in result.stdout.strip().split('\n'):
if line.strip():
logging.info(line)
if result.returncode == 0:
logging.info(f">>> 任务执行成功")
else:
logging.error(f">>> 任务执行失败,返回码: {result.returncode}")
if result.stderr:
logging.error(f"错误信息: {result.stderr[:500]}")
except subprocess.TimeoutExpired:
logging.error(f">>> 任务执行超时(超过 {timeout} 秒),已强制终止")
except Exception as e:
logging.error(f">>> 任务执行异常: {str(e)}")
logging.error(traceback.format_exc())
# 重新加载任务

View File

@ -164,7 +164,7 @@ class MagicRename:
"{YEAR}": [r"(?<!\d)(18|19|20)\d{2}(?!\d)"],
"{S}": [r"(?<=[Ss])\d{1,2}(?=[EeXx])", r"(?<=[Ss])\d{1,2}"],
"{SXX}": [r"[Ss]\d{1,2}(?=[EeXx])", r"[Ss]\d{1,2}"],
"{E}": [
"{E+}": [
r"(?<=[Ss]\d\d[Ee])\d{1,3}",
r"(?<=[Ee])\d{1,3}",
r"(?<=[Ee][Pp])\d{1,3}",
@ -224,7 +224,7 @@ class MagicRename:
return file_name
# 预处理替换变量
for key, p_list in self.magic_variable.items():
if key in replace:
if match_key := re.search(key, replace):
# 正则类替换变量
if p_list and isinstance(p_list, list):
for p in p_list:
@ -240,7 +240,10 @@ class MagicRename:
value = (
str(datetime.now().year)[: (8 - len(value))] + value
)
replace = replace.replace(key, value)
# 集数零填充处理
elif key == "{E+}":
value = value.lstrip("0").zfill(match_key.group().count("E"))
replace = re.sub(key, value, replace)
break
# 非正则类替换变量
if key == "{TASKNAME}":
@ -251,7 +254,7 @@ class MagicRename:
continue
else:
# 清理未匹配的 magic_variable key
replace = replace.replace(key, "")
replace = re.sub(key, "", replace)
if pattern and replace:
file_name = re.sub(pattern, replace, file_name)
else: