mirror of
https://github.com/HChaZZY/NodeSeek-Signin.git
synced 2025-12-06 11:33:49 +08:00
fix(docker): 修复 Docker 环境中的日志缓冲和证书问题
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
FROM python:3.9-alpine
|
FROM python:3.9-alpine
|
||||||
|
|
||||||
# 设置时区为 GMT+8
|
# 设置时区为 GMT+8
|
||||||
RUN apk add --no-cache tzdata
|
RUN apk add --no-cache tzdata ca-certificates
|
||||||
ENV TZ=Asia/Shanghai
|
ENV TZ=Asia/Shanghai
|
||||||
|
|
||||||
# 设置工作目录
|
# 设置工作目录
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
version: '3.8'
|
|
||||||
services:
|
services:
|
||||||
nodeseek-signin:
|
nodeseek-signin:
|
||||||
build: .
|
build: .
|
||||||
|
image: nodeseek-signin:latest
|
||||||
|
container_name: nodeseek-signin
|
||||||
|
command: ["python", "scheduler.py"]
|
||||||
environment:
|
environment:
|
||||||
- IN_DOCKER=true
|
- IN_DOCKER=true
|
||||||
env_file:
|
env_file:
|
||||||
|
|||||||
37
scheduler.py
37
scheduler.py
@@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
import random
|
import random
|
||||||
@@ -6,6 +7,10 @@ import subprocess
|
|||||||
import re
|
import re
|
||||||
from datetime import timezone, timedelta
|
from datetime import timezone, timedelta
|
||||||
|
|
||||||
|
# 测试程序时使用
|
||||||
|
# from dotenv import load_dotenv
|
||||||
|
# load_dotenv()
|
||||||
|
|
||||||
GMT8 = timezone(timedelta(hours=8))
|
GMT8 = timezone(timedelta(hours=8))
|
||||||
|
|
||||||
def get_run_config():
|
def get_run_config():
|
||||||
@@ -19,17 +24,17 @@ def get_run_config():
|
|||||||
run_at_env = os.environ.get('RUN_AT', '08:00-10:59')
|
run_at_env = os.environ.get('RUN_AT', '08:00-10:59')
|
||||||
|
|
||||||
if re.fullmatch(r'\d{2}:\d{2}', run_at_env):
|
if re.fullmatch(r'\d{2}:\d{2}', run_at_env):
|
||||||
print(f"检测到固定时间模式: {run_at_env}")
|
print(f"检测到固定时间模式: {run_at_env}", flush=True)
|
||||||
return 'fixed', run_at_env
|
return 'fixed', run_at_env
|
||||||
|
|
||||||
if re.fullmatch(r'\d{2}:\d{2}-\d{2}:\d{2}', run_at_env):
|
if re.fullmatch(r'\d{2}:\d{2}-\d{2}:\d{2}', run_at_env):
|
||||||
print(f"检测到随机时间范围模式: {run_at_env}")
|
print(f"检测到随机时间范围模式: {run_at_env}", flush=True)
|
||||||
return 'range', run_at_env
|
return 'range', run_at_env
|
||||||
|
|
||||||
if os.environ.get('RUN_AT'):
|
if os.environ.get('RUN_AT'):
|
||||||
print(f"警告: 环境变量 RUN_AT 的格式 '{run_at_env}' 无效。")
|
print(f"警告: 环境变量 RUN_AT 的格式 '{run_at_env}' 无效。", flush=True)
|
||||||
|
|
||||||
print("将使用默认随机时间范围 '08:00-10:59'。")
|
print("将使用默认随机时间范围 '08:00-10:59'。", flush=True)
|
||||||
return 'range', '08:00-10:59'
|
return 'range', '08:00-10:59'
|
||||||
|
|
||||||
def calculate_next_run_time(mode, value):
|
def calculate_next_run_time(mode, value):
|
||||||
@@ -78,26 +83,26 @@ def run_checkin_task():
|
|||||||
"""
|
"""
|
||||||
执行 nodeseek_sign.py 脚本。
|
执行 nodeseek_sign.py 脚本。
|
||||||
"""
|
"""
|
||||||
print(f"[{datetime.datetime.now(GMT8).strftime('%Y-%m-%d %H:%M:%S')}] 开始执行签到任务...")
|
print(f"[{datetime.datetime.now(GMT8).strftime('%Y-%m-%d %H:%M:%S')}] 开始执行签到任务...", flush=True)
|
||||||
try:
|
try:
|
||||||
subprocess.run(["python", "nodeseek_sign.py"], check=True)
|
subprocess.run([sys.executable, "nodeseek_sign.py"], check=True)
|
||||||
print(f"[{datetime.datetime.now(GMT8).strftime('%Y-%m-%d %H:%M:%S')}] 签到任务执行完毕。")
|
print(f"[{datetime.datetime.now(GMT8).strftime('%Y-%m-%d %H:%M:%S')}] 签到任务执行完毕。", flush=True)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
print("错误: 'nodeseek_sign.py' 未找到。请确保它与 scheduler.py 位于同一目录。")
|
print("错误: 'nodeseek_sign.py' 未找到。请确保它与 scheduler.py 位于同一目录。", flush=True)
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
print(f"签到任务执行失败,返回码: {e.returncode}")
|
print(f"签到任务执行失败,返回码: {e.returncode}", flush=True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"执行签到任务时发生未知错误: {e}")
|
print(f"执行签到任务时发生未知错误: {e}", flush=True)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""
|
"""
|
||||||
主调度循环。
|
主调度循环。
|
||||||
"""
|
"""
|
||||||
print("调度器启动...")
|
print("调度器启动...", flush=True)
|
||||||
mode, value = get_run_config()
|
mode, value = get_run_config()
|
||||||
print(f"调度模式: '{mode}', 配置值: '{value}'")
|
print(f"调度模式: '{mode}', 配置值: '{value}'", flush=True)
|
||||||
|
|
||||||
run_checkin_task()
|
# run_checkin_task() # 启动时执行,用于测试程序
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
next_run_time = calculate_next_run_time(mode, value)
|
next_run_time = calculate_next_run_time(mode, value)
|
||||||
@@ -105,13 +110,13 @@ def main():
|
|||||||
sleep_duration = (next_run_time - now).total_seconds()
|
sleep_duration = (next_run_time - now).total_seconds()
|
||||||
|
|
||||||
if sleep_duration > 0:
|
if sleep_duration > 0:
|
||||||
print(f"下一次签到任务计划在: {next_run_time.strftime('%Y-%m-%d %H:%M:%S')}")
|
print(f"下一次签到任务计划在: {next_run_time.strftime('%Y-%m-%d %H:%M:%S')}", flush=True)
|
||||||
hours, remainder = divmod(sleep_duration, 3600)
|
hours, remainder = divmod(sleep_duration, 3600)
|
||||||
minutes, _ = divmod(remainder, 60)
|
minutes, _ = divmod(remainder, 60)
|
||||||
print(f"程序将休眠 {int(hours)} 小时 {int(minutes)} 分钟。")
|
print(f"程序将休眠 {int(hours)} 小时 {int(minutes)} 分钟。", flush=True)
|
||||||
time.sleep(sleep_duration)
|
time.sleep(sleep_duration)
|
||||||
else:
|
else:
|
||||||
print("计算出的下一个运行时间已过,等待 60 秒后重试...")
|
print("计算出的下一个运行时间已过,等待 60 秒后重试...", flush=True)
|
||||||
time.sleep(60)
|
time.sleep(60)
|
||||||
|
|
||||||
run_checkin_task()
|
run_checkin_task()
|
||||||
|
|||||||
Reference in New Issue
Block a user