fix: shop.service 203/EXEC — bash, +x на scripts, убрать CRLF

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 14:50:12 +03:00
parent 7cb61d4242
commit e81bd79607
4 changed files with 20 additions and 8 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ User=www-data
Group=www-data Group=www-data
WorkingDirectory=/opt/shop WorkingDirectory=/opt/shop
EnvironmentFile=/opt/shop/.env EnvironmentFile=/opt/shop/.env
ExecStartPre=+/opt/shop/scripts/wait-postgres.sh ExecStartPre=+/bin/bash /opt/shop/scripts/wait-postgres.sh
ExecStart=/usr/bin/node src/server.js ExecStart=/usr/bin/node src/server.js
Restart=on-failure Restart=on-failure
RestartSec=5 RestartSec=5
+16 -1
View File
@@ -21,8 +21,18 @@ fi
echo "=== Права Shop: $SHOP_ROOT$SHOP_SERVICE_USER ===" echo "=== Права Shop: $SHOP_ROOT$SHOP_SERVICE_USER ==="
# CRLF из Windows → 203/EXEC в systemd
if [ -d "$SHOP_ROOT/scripts" ]; then
find "$SHOP_ROOT/scripts" -name '*.sh' -type f -exec sed -i 's/\r$//' {} +
fi
chown -R "$SHOP_SERVICE_USER:$SHOP_SERVICE_USER" "$SHOP_ROOT" chown -R "$SHOP_SERVICE_USER:$SHOP_SERVICE_USER" "$SHOP_ROOT"
# Исполняемые скрипты (wait-postgres.sh для ExecStartPre)
if [ -d "$SHOP_ROOT/scripts" ]; then
chmod +x "$SHOP_ROOT"/scripts/*.sh 2>/dev/null || true
fi
# npm cache/logs для www-data # npm cache/logs для www-data
for dir in /var/www/.npm /var/www/.cache; do for dir in /var/www/.npm /var/www/.cache; do
mkdir -p "$dir" mkdir -p "$dir"
@@ -34,4 +44,9 @@ if [ -f "$SHOP_ROOT/.env" ]; then
chown "$SHOP_SERVICE_USER:$SHOP_SERVICE_USER" "$SHOP_ROOT/.env" chown "$SHOP_SERVICE_USER:$SHOP_SERVICE_USER" "$SHOP_ROOT/.env"
fi fi
echo "OK: владелец $SHOP_SERVICE_USER, можно: systemctl restart shop" # Родительские каталоги — traverse для www-data
chmod o+x /opt /opt/shop 2>/dev/null || true
echo "OK: владелец $SHOP_SERVICE_USER, скрипты +x"
echo "Проверка unit: grep ExecStartPre /etc/systemd/system/shop.service"
echo " sudo systemctl daemon-reload && sudo systemctl restart shop"
+2 -6
View File
@@ -58,16 +58,12 @@ fi
npm install --omit=dev --prefix "$SHOP_ROOT" npm install --omit=dev --prefix "$SHOP_ROOT"
# Доступ www-data: чтение кода и .env (systemd читает .env от root, но на всякий случай) bash "$SCRIPT_DIR/fix-shop-permissions.sh"
chmod o+x /opt /opt/shop 2>/dev/null || true
chmod -R a+rX "$SHOP_ROOT"
chmod 640 "$SHOP_ROOT/.env"
chown root:www-data "$SHOP_ROOT/.env" 2>/dev/null || chmod 644 "$SHOP_ROOT/.env"
cp -f "$SHOP_ROOT/deploy/shop.service" /etc/systemd/system/shop.service cp -f "$SHOP_ROOT/deploy/shop.service" /etc/systemd/system/shop.service
sed -i "s|WorkingDirectory=.*|WorkingDirectory=${SHOP_ROOT}|" /etc/systemd/system/shop.service sed -i "s|WorkingDirectory=.*|WorkingDirectory=${SHOP_ROOT}|" /etc/systemd/system/shop.service
sed -i "s|EnvironmentFile=.*|EnvironmentFile=${SHOP_ROOT}/.env|" /etc/systemd/system/shop.service sed -i "s|EnvironmentFile=.*|EnvironmentFile=${SHOP_ROOT}/.env|" /etc/systemd/system/shop.service
sed -i "s|ExecStartPre=.*|ExecStartPre=+${SHOP_ROOT}/scripts/wait-postgres.sh|" /etc/systemd/system/shop.service sed -i "s|ExecStartPre=.*|ExecStartPre=+/bin/bash ${SHOP_ROOT}/scripts/wait-postgres.sh|" /etc/systemd/system/shop.service
sed -i "s|ExecStart=.*|ExecStart=${NODE_BIN} src/server.js|" /etc/systemd/system/shop.service sed -i "s|ExecStart=.*|ExecStart=${NODE_BIN} src/server.js|" /etc/systemd/system/shop.service
if ! sudo -u www-data test -r "$SHOP_ROOT/package.json"; then if ! sudo -u www-data test -r "$SHOP_ROOT/package.json"; then
+1
View File
@@ -40,6 +40,7 @@ journalctl -u shop -n 50 --no-pager
| detached HEAD | `bash scripts/git-sync.sh` | | detached HEAD | `bash scripts/git-sync.sh` |
| `EACCES` на `package-lock.json`, npm от www-data | `sudo bash scripts/fix-shop-permissions.sh` затем `sudo npm install --omit=dev` и снова `fix-shop-permissions` | | `EACCES` на `package-lock.json`, npm от www-data | `sudo bash scripts/fix-shop-permissions.sh` затем `sudo npm install --omit=dev` и снова `fix-shop-permissions` |
| `shop.service` failed после обновления | `sudo bash scripts/fix-shop-permissions.sh` && `sudo systemctl restart shop` | | `shop.service` failed после обновления | `sudo bash scripts/fix-shop-permissions.sh` && `sudo systemctl restart shop` |
| `status=203/EXEC` на `wait-postgres.sh` | `chmod +x scripts/*.sh`; `sed -i 's/\r$//' scripts/*.sh`; в unit: `ExecStartPre=+/bin/bash .../wait-postgres.sh`; `sudo bash scripts/install-shop-service.sh` |
| Нет `scripts/...` | `bash "$SHOP_ROOT/scripts/server-update.sh"` | | Нет `scripts/...` | `bash "$SHOP_ROOT/scripts/server-update.sh"` |
| Unit shop not found | `sudo bash scripts/install-shop-service.sh` | | Unit shop not found | `sudo bash scripts/install-shop-service.sh` |
| shop exit-code / auto-restart | `sudo bash scripts/free-port-3000.sh`; `systemctl restart shop` | | shop exit-code / auto-restart | `sudo bash scripts/free-port-3000.sh`; `systemctl restart shop` |