[Unit] Description=Data Refresh - scheduled sync from BigQuery to local Parquet After=network-online.target Wants=network-online.target [Service] Type=oneshot User=root Group=data-ops WorkingDirectory=/opt/data-analyst/repo ExecStart=/opt/data-analyst/.venv/bin/python3 -m src.data_sync --scheduled # Environment EnvironmentFile=/opt/data-analyst/.env Environment=PYTHONPATH=/opt/data-analyst/repo Environment=CONFIG_DIR=/opt/data-analyst/instance/config # Write access to data directory, logs, and /tmp (for staging + lock file) ProtectSystem=strict ReadWritePaths=/data /opt/data-analyst/logs /tmp PrivateTmp=false # Sync can take a while for large tables TimeoutStartSec=3600 # Prevent overlapping runs ExecCondition=/usr/bin/test ! -f /tmp/data-refresh.lock ExecStartPre=/usr/bin/touch /tmp/data-refresh.lock ExecStartPost=/usr/bin/rm -f /tmp/data-refresh.lock ExecStopPost=/usr/bin/rm -f /tmp/data-refresh.lock [Install] WantedBy=multi-user.target