fix: shop.service 203/EXEC — bash, +x на scripts, убрать CRLF
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+1
-1
@@ -9,7 +9,7 @@ User=www-data
|
||||
Group=www-data
|
||||
WorkingDirectory=/opt/shop
|
||||
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
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
@@ -21,8 +21,18 @@ fi
|
||||
|
||||
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"
|
||||
|
||||
# Исполняемые скрипты (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
|
||||
for dir in /var/www/.npm /var/www/.cache; do
|
||||
mkdir -p "$dir"
|
||||
@@ -34,4 +44,9 @@ if [ -f "$SHOP_ROOT/.env" ]; then
|
||||
chown "$SHOP_SERVICE_USER:$SHOP_SERVICE_USER" "$SHOP_ROOT/.env"
|
||||
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"
|
||||
|
||||
@@ -58,16 +58,12 @@ fi
|
||||
|
||||
npm install --omit=dev --prefix "$SHOP_ROOT"
|
||||
|
||||
# Доступ www-data: чтение кода и .env (systemd читает .env от root, но на всякий случай)
|
||||
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"
|
||||
bash "$SCRIPT_DIR/fix-shop-permissions.sh"
|
||||
|
||||
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|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
|
||||
|
||||
if ! sudo -u www-data test -r "$SHOP_ROOT/package.json"; then
|
||||
|
||||
@@ -40,6 +40,7 @@ journalctl -u shop -n 50 --no-pager
|
||||
| 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` |
|
||||
| `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"` |
|
||||
| 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` |
|
||||
|
||||
Reference in New Issue
Block a user