set -euo pipefail release=/home/ps/token-usage-20260917 cd /opt/im-admin/deploy/im-admin docker image inspect zyt/wecom-admin:before-token-usage-20260917 >/dev/null test -f "$release/source-before.tar.gz" docker compose stop knowledge-worker python3 - <<'PY' from pathlib import Path import tarfile,shutil root=Path('/opt/im-admin') with tarfile.open('/home/ps/token-usage-20260917/source-before.tar.gz') as tf: for item in tf.getmembers(): if item.isfile(): target=(root/item.name).resolve() assert root in target.parents target.parent.mkdir(parents=True,exist_ok=True) with tf.extractfile(item) as source,target.open('wb') as output: shutil.copyfileobj(source,output) PY docker tag zyt/wecom-admin:before-token-usage-20260917 zyt/wecom-admin:current docker compose up -d --no-build --wait --wait-timeout 180 api gateway knowledge-worker echo 'Previous image and source restored; live database retained.'