fix: use exec for flock file descriptors to work with zsh

This commit is contained in:
2026-01-25 20:27:55 +03:00
parent 30465e0bea
commit 76cb533851

View File

@@ -147,19 +147,31 @@ jobs:
local lock_file="${history_file}.lock" local lock_file="${history_file}.lock"
local history_size="${DEPLOY_HISTORY_SIZE:-10}" local history_size="${DEPLOY_HISTORY_SIZE:-10}"
( if command -v flock > /dev/null 2>&1; then
# Блокируем файл на запись (exclusive lock) # Используем flock с exec для открытия файлового дескриптора (работает в zsh)
flock -x 200 || { echo "❌ Failed to acquire lock on $history_file"; exit 1; } (
exec 200>"$lock_file"
if flock -x 200; then
# Записываем новую запись
echo "$entry" >> "$history_file"
# Записываем новую запись # Обрезаем файл атомарно
tail -n "$history_size" "$history_file" > "${history_file}.tmp"
mv "${history_file}.tmp" "$history_file"
echo "✅ History updated safely"
else
echo "❌ Failed to acquire lock on $history_file"
exit 1
fi
)
else
# Fallback: простая запись без блокировки
echo "$entry" >> "$history_file" echo "$entry" >> "$history_file"
# Обрезаем файл атомарно
tail -n "$history_size" "$history_file" > "${history_file}.tmp" tail -n "$history_size" "$history_file" > "${history_file}.tmp"
mv "${history_file}.tmp" "$history_file" mv "${history_file}.tmp" "$history_file"
echo "✅ History updated (fallback method)"
echo "✅ History updated safely" fi
) 200>"$lock_file"
} }
# Переходим в директорию проекта под пользователем deploy # Переходим в директорию проекта под пользователем deploy
@@ -500,9 +512,10 @@ jobs:
local lock_file="${history_file}.lock" local lock_file="${history_file}.lock"
if command -v flock > /dev/null 2>&1; then if command -v flock > /dev/null 2>&1; then
# Используем flock с exec для открытия файлового дескриптора (работает в zsh)
( (
# Блокируем файл на запись (exclusive lock) exec 200>"$lock_file"
if flock -x 200 2>/dev/null; then if flock -x 200; then
if [ -f "$history_file" ]; then if [ -f "$history_file" ]; then
# Заменяем последнюю строку со статусом deploying на финальный статус # Заменяем последнюю строку со статусом deploying на финальный статус
sed -i '$s/|deploying$/|'"$new_status"'/' "$history_file" sed -i '$s/|deploying$/|'"$new_status"'/' "$history_file"
@@ -518,7 +531,7 @@ jobs:
echo "✅ Deploy history updated (fallback method)" echo "✅ Deploy history updated (fallback method)"
fi fi
fi fi
) 200>"$lock_file" )
else else
# Fallback: если flock недоступен # Fallback: если flock недоступен
echo "⚠️ flock not available, using simple update" echo "⚠️ flock not available, using simple update"
@@ -706,8 +719,8 @@ jobs:
if command -v flock > /dev/null 2>&1; then if command -v flock > /dev/null 2>&1; then
( (
# Блокируем файл на чтение (shared lock) exec 200>"$lock_file"
if flock -s 200 2>/dev/null; then if flock -s 200; then
if [ -f "$history_file" ]; then if [ -f "$history_file" ]; then
cat "$history_file" cat "$history_file"
else else
@@ -722,7 +735,7 @@ jobs:
echo "" echo ""
fi fi
fi fi
) 200>"$lock_file" )
else else
# Fallback: если flock недоступен # Fallback: если flock недоступен
if [ -f "$history_file" ]; then if [ -f "$history_file" ]; then
@@ -740,19 +753,31 @@ jobs:
local lock_file="${history_file}.lock" local lock_file="${history_file}.lock"
local history_size="${DEPLOY_HISTORY_SIZE:-10}" local history_size="${DEPLOY_HISTORY_SIZE:-10}"
( if command -v flock > /dev/null 2>&1; then
# Блокируем файл на запись (exclusive lock) # Используем flock с exec для открытия файлового дескриптора (работает в zsh)
flock -x 200 || { echo "❌ Failed to acquire lock on $history_file"; exit 1; } (
exec 200>"$lock_file"
if flock -x 200; then
# Записываем новую запись
echo "$entry" >> "$history_file"
# Записываем новую запись # Обрезаем файл атомарно
tail -n "$history_size" "$history_file" > "${history_file}.tmp"
mv "${history_file}.tmp" "$history_file"
echo "✅ History updated safely"
else
echo "❌ Failed to acquire lock on $history_file"
exit 1
fi
)
else
# Fallback: простая запись без блокировки
echo "$entry" >> "$history_file" echo "$entry" >> "$history_file"
# Обрезаем файл атомарно
tail -n "$history_size" "$history_file" > "${history_file}.tmp" tail -n "$history_size" "$history_file" > "${history_file}.tmp"
mv "${history_file}.tmp" "$history_file" mv "${history_file}.tmp" "$history_file"
echo "✅ History updated (fallback method)"
echo "✅ History updated safely" fi
) 200>"$lock_file"
} }
# Функция для безопасного изменения прав на bots директорию # Функция для безопасного изменения прав на bots директорию