rommapp / romm

A beautiful, powerful, self-hosted rom manager
https://romm.app
GNU Affero General Public License v3.0
1.77k stars 80 forks source link

[Bug] hourly cron will fail #817

Closed ramonskie closed 4 months ago

ramonskie commented 4 months ago

running version: rommapp/romm:3.1.0-rc.2 docker-compose excerpt

services:
  romm:
    image: rommapp/romm:3.1.0-rc.2
    container_name: romm
    restart: unless-stopped
    user: 1027:xxxx #YOUR_UID_AND_GID
    environment:
      - DB_HOST=romm-db
      - DB_NAME=romm # Should match MYSQL_DATABASE in mariadb
      - DB_USER=romm-user # Should match MYSQL_USER in mariadb
      - DB_PASSWD=xxxxx # Should match MYSQL_PASSWORD in mariadb
      - IGDB_CLIENT_ID=xxxxxxx # Generate an ID and SECRET in IGDB
      - IGDB_CLIENT_SECRET=xxxxxxxxxxxxxx # https://api-docs.igdb.com/#account-creation
      - MOBYGAMES_API_KEY=xxxxxxx # https://www.mobygames.com/info/api/
      - ROMM_AUTH_SECRET_KEY=xxxxxxxxxxxxxxxxx
      - ROMM_AUTH_USERNAME=admin
      - ROMM_AUTH_PASSWORD=xxxx
      - ENABLE_SCHEDULED_RESCAN=true
      - SCHEDULED_RESCAN_CRON="0 */4 * * *" 

the following cron syntax wil result in a failure "0 */4 * * * " this should trigger it every 4th hour see: https://crontab.guru/#0*/4__*

but in settings>controll panel. it wills show Rescans the entire library at "0 seconds past the minute, every 4 minutes, every hour, only on undefined

date    stream  content
2024/04/18 15:42:19 stdout  INFO:     [init][2024-04-18 13:42:19] starting scheduler.py
2024/04/18 15:42:18 stderr  ValueError: invalid range specifier: '"0' ('"0')
2024/04/18 15:42:18 stderr      raise ValueError(message%args)
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/crontab/_crontab.py", line 181, in _assert
2024/04/18 15:42:18 stderr      _assert(it.isdigit(),
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/crontab/_crontab.py", line 272, in _fix
2024/04/18 15:42:18 stderr              ^^^^^^^^
2024/04/18 15:42:18 stderr      start = _fix(it)
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/crontab/_crontab.py", line 291, in _parse_piece
2024/04/18 15:42:18 stderr             ^^^^^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      good = _parse_piece(entry)
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/crontab/_crontab.py", line 362, in _parse_crontab
2024/04/18 15:42:18 stderr               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      al, en = self._parse_crontab(which, it)
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/crontab/_crontab.py", line 204, in __init__
2024/04/18 15:42:18 stderr                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      matchers = [_Matcher(which, entry, loop) for which, entry in enumerate(ct)]
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/crontab/_crontab.py", line 410, in <listcomp>
2024/04/18 15:42:18 stderr                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      matchers = [_Matcher(which, entry, loop) for which, entry in enumerate(ct)]
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/crontab/_crontab.py", line 410, in _make_matchers
2024/04/18 15:42:18 stderr                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      self.matchers = self._make_matchers(crontab, loop, random_seconds)
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/crontab/_crontab.py", line 386, in __init__
2024/04/18 15:42:18 stderr             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      cron = crontab.CronTab(cron_string)
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/rq_scheduler/utils.py", line 27, in get_next_scheduled_time
2024/04/18 15:42:18 stderr                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      scheduled_time = get_next_scheduled_time(cron_string, use_local_timezone=use_local_timezone)
2024/04/18 15:42:18 stderr    File "/backend/lib/python3.11/site-packages/rq_scheduler/scheduler.py", line 277, in cron
2024/04/18 15:42:18 stderr             ^^^^^^^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      return tasks_scheduler.cron(
2024/04/18 15:42:18 stderr    File "/backend/tasks/tasks.py", line 54, in schedule
2024/04/18 15:42:18 stderr             ^^^^^^^^^^^^^^^
2024/04/18 15:42:18 stderr      return self.schedule()
2024/04/18 15:42:18 stderr    File "/backend/tasks/tasks.py", line 37, in init
2024/04/18 15:42:18 stderr      scan_library_task.init()
2024/04/18 15:42:18 stderr    File "/backend/scheduler.py", line 8, in <module>
2024/04/18 15:42:18 stderr  Traceback (most recent call last):
2024/04/18 15:42:17 stdout  INFO:   [RomM][2024-04-18 13:42:17] Redis connection established in scheduler.py!
ramonskie commented 4 months ago

just want to mention it also happens with 0 3 * * * which should be the default defined here https://github.com/rommapp/romm/wiki/Scheduled-Tasks if i remove the SCHEDULED_RESCAN_CRON variable and only have ENABLE_SCHEDULED_RESCAN enabled all works as expected.

its probably due to some interpolation issue when grabbing the environment variable

EDIT: it is indeed an issue when its double quoted - SCHEDULED_RESCAN_CRON="0 */4 * * *" fails - SCHEDULED_RESCAN_CRON=0 */4 * * * works

gantoine commented 4 months ago

Yeah the double-quotes shouldn't be used in the docker-compose, I'll mark this as solved for future readers.