TISUnion / PrimeBackup

A powerful backup plugin for MCDR, an advanced backup solution for your Minecraft world
https://tisunion.github.io/PrimeBackup/
GNU Lesser General Public License v3.0
76 stars 6 forks source link

插件加载失败 #22

Closed ailixiyaX closed 4 months ago

ailixiyaX commented 5 months ago

系统环境: Debian 6.1.69 python 3.12.2 mcdreforged 2.12 [MCDR] [2024-03-22 15:20:34] [TaskExecutor/INFO] [prime_backup]: 读取配置文件失败,使用默认值: [Errno 2] No such file or directory: 'config/prime_backup/config.json' [MCDR] [2024-03-22 15:20:34] [TaskExecutor/ERROR] [prime_backup]: Prime Backup initialization failed and will be disabled [MCDR] [2024-03-22 15:20:34] [TaskExecutor/INFO] [prime_backup]: Shutting down everything... [MCDR] [2024-03-22 15:20:34] [TaskExecutor/INFO] [prime_backup]: Shutdown completes [MCDR] [2024-03-22 15:20:34] [TaskExecutor/ERROR]: Error invoking listener EventListener[plugin=prime_backup@1.7.3,priority=1000,callback=<function on_load at 0x7f7e87d25e10>] Traceback (most recent call last): File "plugins/PrimeBackup-v1.7.3.pyz/prime_backup/config/config_common.py", line 12, in _validate_crontab_str CronTrigger.from_crontab(value) File "/usr/local/lib/python3.10/dist-packages/apscheduler/triggers/cron/init.py", line 103, in from_crontab return cls(minute=values[0], hour=values[1], day=values[2], month=values[3], File "/usr/local/lib/python3.10/dist-packages/apscheduler/triggers/cron/init.py", line 59, in init self.timezone = get_localzone() File "/usr/local/lib/python3.10/dist-packages/tzlocal/unix.py", line 219, in get_localzone _cache_tz = _get_localzone() File "/usr/local/lib/python3.10/dist-packages/tzlocal/unix.py", line 176, in _get_localzone tzenv = utils._tz_from_env() File "/usr/local/lib/python3.10/dist-packages/tzlocal/utils.py", line 109, in _tz_from_env raise zoneinfo.ZoneInfoNotFoundError( zoneinfo._common.ZoneInfoNotFoundError: 'tzlocal() does not support non-zoneinfo timezones like Asia/Shanghai. \nPlease use a timezone in the form of Continent/City'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/local/lib/python3.10/dist-packages/mcdreforged/plugin/plugin_manager.py", line 600, in trigger_listener listener.execute(listener.plugin.server_interface, args) File "/usr/local/lib/python3.10/dist-packages/mcdreforged/plugin/plugin_event.py", line 106, in execute return self.callback(args, kwargs) File "plugins/PrimeBackup-v1.7.3.pyz/prime_backup/mcdr/mcdr_entrypoint.py", line 44, in on_load config = server.load_config_simple(target_class=Config, failure_policy='raise') File "/usr/local/lib/python3.10/dist-packages/mcdreforged/plugin/server_interface.py", line 1210, in load_config_simple result_config = target_class.deserialize(result_config, missing_callback=set_imperfect, redundancy_callback=set_imperfect) File "plugins/PrimeBackup-v1.7.3.pyz/prime_backup/config/config.py", line 82, in deserialize return super().deserialize(data, kwargs) File "/usr/local/lib/python3.10/dist-packages/mcdreforged/utils/serializer.py", line 436, in deserialize return deserialize(data, cls, kwargs) File "/usr/local/lib/python3.10/dist-packages/mcdreforged/utils/serializer.py", line 288, in deserialize set_result_attr(attr_name, deserialize(data[attr_name], attr_type, kwargs)) File "/usr/local/lib/python3.10/dist-packages/mcdreforged/utils/serializer.py", line 288, in deserialize set_result_attr(attr_name, deserialize(data[attr_name], attr_type, kwargs)) File "/usr/local/lib/python3.10/dist-packages/mcdreforged/utils/serializer.py", line 288, in deserialize set_result_attr(attr_name, deserialize(data[attr_name], attr_type, kwargs)) File "/usr/local/lib/python3.10/dist-packages/mcdreforged/utils/serializer.py", line 281, in set_result_attr result.validate_attribute(attrname, attrvalue) File "plugins/PrimeBackup-v1.7.3.pyz/prime_backup/config/config_common.py", line 25, in validate_attribute _validate_crontab_str(attr_value) File "plugins/PrimeBackup-v1.7.3.pyz/prime_backup/config/config_common.py", line 14, in _validate_crontab_str raise ValueError('bad crontab string {!r}: {}'.format(value, e)) ValueError: bad crontab string '0 7 *': 'tzlocal() does not support non-zoneinfo timezones like Asia/Shanghai. \nPlease use a timezone in the form of Continent/City'

ailixiyaX commented 5 months ago

服务器是存在于docker镜像中的,使用mcsm面板

Fallen-Breath commented 5 months ago

tzlocal 未能正常工作。请检查 MCDR 的运行环境。考虑到你使用了 docker 容器运行,则请检查所使用的镜像是否被过度精简过

可用于测试 tzlocal 是否正常工作的 shell 指令:

$ TZ=Asia/Shanghai python3 -c 'import tzlocal; tz = tzlocal.get_localzone(); print(type(tz), tz)'
<class 'zoneinfo.ZoneInfo'> Asia/Shanghai

复现环境:Docker Hub python:3.10-slim 镜像,可按照预期工作

$ sudo docker run -it --rm python:3.10-slim bash
root@e6681321cff1:/# PIP_ROOT_USER_ACTION=ignore pip3 install 'APScheduler>=3.8,<4' --quiet --disable-pip-version-check 
root@e6681321cff1:/# TZ=Asia/Shanghai python -c 'import tzlocal; tz = tzlocal.get_localzone(); print(type(tz), tz)'
<class 'zoneinfo.ZoneInfo'> Asia/Shanghai
Fallen-Breath commented 5 months ago

除此之外,请正确地描述问题所在的环境,正确地区分容器内的环境和宿主机的环境(标注的是 python3.12,但错误信息里出现了 python3.10)。由于 MCDR 是在容器里运行的,因此描述所用镜像的环境信息更为必要

ailixiyaX commented 5 months ago

我想我标错了