diff --git a/ct/paperless-ngx.sh b/ct/paperless-ngx.sh index ef4aeee52..40ff5a859 100644 --- a/ct/paperless-ngx.sh +++ b/ct/paperless-ngx.sh @@ -157,8 +157,6 @@ function update_script() { sed -i '$a\PAPERLESS_ARCHIVE_FILE_GENERATION=never' "$PAPERLESS_CONF" fi fi - [[ -n "$(sed -n '/^PAPERLESS_CONSUMER_IGNORE_PATTERNS=/p' "$PAPERLESS_CONF")" ]] && - msg_warn "PAPERLESS_CONSUMER_IGNORE_PATTERNS now uses regex patterns; please verify custom values." [[ -n "$(sed -n '/^PAPERLESS_PRE_CONSUME_SCRIPT=/p;/^PAPERLESS_POST_CONSUME_SCRIPT=/p' "$PAPERLESS_CONF")" ]] && msg_warn "Pre/post consume scripts no longer receive positional arguments in v3; please verify custom scripts." msg_ok "Migrated Paperless-ngx configuration" @@ -172,7 +170,9 @@ function update_script() { fi for svc in consumer scheduler task-queue webserver; do unit="/etc/systemd/system/paperless-${svc}.service" - [[ -f "$unit" ]] && sed -i 's|uv run -- |uv run --no-sync -- |g' "$unit" + [[ -f "$unit" ]] || continue + sed -i 's|uv run -- |uv run --no-sync -- |g' "$unit" + grep -q '^Restart=' "$unit" || sed -i '/^\[Service\]/a Restart=on-failure\nRestartSec=5' "$unit" done $STD systemctl daemon-reload cd /opt/paperless @@ -181,6 +181,34 @@ function update_script() { $STD uv run -- python manage.py migrate msg_ok "Updated Paperless-ngx" + if ((BRIDGE_UPDATE == 0)); then + IGNORE_FIXED="$( + /opt/paperless/.venv/bin/python - /opt/paperless/paperless.conf <<'EOF' +import json, re, sys +key = "PAPERLESS_CONSUMER_IGNORE_PATTERNS=" +lines = open(sys.argv[1]).read().splitlines(True) + +def is_glob(p): + if p.startswith("^") or p.endswith("$"): + return False + try: + return bool(re.search(p, "scan.pdf")) + except re.error: + return True + +for i, line in enumerate(lines): + if line.startswith(key): + patterns = json.loads(line[len(key):].strip().strip("'")) + fixed = ["^" + re.escape(p).replace(r"\*", ".*").replace(r"\?", ".") + "$" if is_glob(p) else p for p in patterns] + if fixed != patterns: + lines[i] = key + json.dumps(fixed) + "\n" + print(json.dumps(fixed)) +open(sys.argv[1], "w").writelines(lines) +EOF + )" || IGNORE_FIXED="" + [[ -n "$IGNORE_FIXED" ]] && msg_warn "Converted glob PAPERLESS_CONSUMER_IGNORE_PATTERNS to regex (required since v3): ${IGNORE_FIXED}" + fi + if ((BRIDGE_UPDATE == 0)) && [[ "$PAPERLESS_INSTALLED_VERSION" == "2.20.15" ]]; then $STD apt -y purge libzbar0t64 libzbar0 2>/dev/null || true $STD apt -y autoremove 2>/dev/null || true diff --git a/install/paperless-ngx-install.sh b/install/paperless-ngx-install.sh index a4d8cfa04..812313608 100644 --- a/install/paperless-ngx-install.sh +++ b/install/paperless-ngx-install.sh @@ -109,6 +109,8 @@ Requires=redis.service [Service] WorkingDirectory=/opt/paperless/src ExecStart=uv run --no-sync -- celery --app paperless beat --loglevel INFO +Restart=on-failure +RestartSec=5 [Install] WantedBy=multi-user.target @@ -123,6 +125,8 @@ After=postgresql.service [Service] WorkingDirectory=/opt/paperless/src ExecStart=uv run --no-sync -- celery --app paperless worker --loglevel INFO +Restart=on-failure +RestartSec=5 [Install] WantedBy=multi-user.target @@ -137,6 +141,8 @@ Requires=redis.service WorkingDirectory=/opt/paperless/src ExecStartPre=/bin/sleep 2 ExecStart=uv run --no-sync -- python manage.py document_consumer +Restart=on-failure +RestartSec=5 [Install] WantedBy=multi-user.target @@ -153,6 +159,8 @@ Requires=redis.service WorkingDirectory=/opt/paperless/src #ExecStartPre=uv run --no-sync -- python manage.py document_index reindex --if-needed --no-progress-bar ExecStart=uv run --no-sync -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application" +Restart=on-failure +RestartSec=5 Environment=GRANIAN_HOST=:: Environment=GRANIAN_PORT=8000 Environment=GRANIAN_WORKERS=1