fix: always sync sac-client.sh in update_ssh_monitor
Copy sac-client.sh on every git pull by checksum, not only when ssh-monitor binary changes. Restart service when either file updates.
This commit is contained in:
+85
-25
@@ -195,6 +195,78 @@ ensure_directories() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# Путь к sac-client.sh в клоне репозитория (корень git)
|
||||
find_sac_client_remote() {
|
||||
local candidates=(
|
||||
"$UPDATE_DIR/$SCRIPT_NAME/sac-client.sh"
|
||||
)
|
||||
local p
|
||||
for p in "${candidates[@]}"; do
|
||||
if [ -f "$p" ]; then
|
||||
printf '%s\n' "$p"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
# Копирует sac-client.sh рядом с LOCAL_SCRIPT_PATH (всегда после git pull, по checksum).
|
||||
# Устанавливает SAC_CLIENT_CHANGED=1 при фактическом обновлении файла.
|
||||
sync_sac_client() {
|
||||
SAC_CLIENT_CHANGED=0
|
||||
local remote local_dst local_sum remote_sum
|
||||
remote=$(find_sac_client_remote) || {
|
||||
log_message "INFO" "WARNING: sac-client.sh not found in repository clone"
|
||||
debug_step "sac-client.sh не найден в клоне репозитория"
|
||||
return 0
|
||||
}
|
||||
|
||||
local_dst="${LOCAL_SCRIPT_PATH%/*}/sac-client.sh"
|
||||
remote_sum=$(sha256sum "$remote" 2>/dev/null | awk '{print $1}')
|
||||
if [ -z "$remote_sum" ]; then
|
||||
log_message "INFO" "ERROR: Failed to checksum remote sac-client.sh"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -f "$local_dst" ]; then
|
||||
local_sum=$(sha256sum "$local_dst" 2>/dev/null | awk '{print $1}')
|
||||
if [ "$local_sum" = "$remote_sum" ]; then
|
||||
log_message "INFO" "sac-client.sh checksums match. No update needed."
|
||||
debug_step "sac-client.sh без изменений"
|
||||
return 0
|
||||
fi
|
||||
else
|
||||
log_message "INFO" "Local sac-client.sh not found. Will install."
|
||||
debug_step "Локальный sac-client.sh отсутствует, будет установлен"
|
||||
fi
|
||||
|
||||
debug_step "Копируем sac-client.sh в $local_dst"
|
||||
if ! cp "$remote" "$local_dst"; then
|
||||
log_message "INFO" "ERROR: Failed to copy sac-client.sh"
|
||||
return 1
|
||||
fi
|
||||
chmod 644 "$local_dst"
|
||||
SAC_CLIENT_CHANGED=1
|
||||
log_message "INFO" "sac-client.sh updated."
|
||||
return 0
|
||||
}
|
||||
|
||||
restart_ssh_monitor_service() {
|
||||
debug_step "Перезапускаем сервис ssh-monitor.service"
|
||||
if command -v systemctl &>/dev/null; then
|
||||
if systemctl restart ssh-monitor.service 2>/dev/null; then
|
||||
log_message "INFO" "Service restarted successfully."
|
||||
debug_step "Сервис успешно перезапущен"
|
||||
else
|
||||
log_message "INFO" "WARNING: Failed to restart service (may not be running)"
|
||||
debug_step "ПРЕДУПРЕЖДЕНИЕ: Не удалось перезапустить сервис"
|
||||
fi
|
||||
else
|
||||
log_message "INFO" "systemctl not found, service not restarted"
|
||||
debug_step "systemctl не найден, сервис не перезапущен"
|
||||
fi
|
||||
}
|
||||
|
||||
# Функция для обновления скрипта
|
||||
update_script() {
|
||||
log_message "INFO" "Starting script update..."
|
||||
@@ -248,6 +320,14 @@ update_script() {
|
||||
debug_step "Скрипт найден по альтернативному пути"
|
||||
fi
|
||||
|
||||
# sac-client.sh — отдельно от ssh-monitor: синхронизируем всегда (нужен для UseSAC/--check-sac)
|
||||
SAC_CLIENT_CHANGED=0
|
||||
if ! sync_sac_client; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
local script_changed=0
|
||||
|
||||
# Проверяем наличие файла скрипта в репозитории
|
||||
if [ -n "$actual_script_path" ] && [ -f "$actual_script_path" ]; then
|
||||
log_message "INFO" "Remote script found. Comparing checksums..."
|
||||
@@ -287,33 +367,9 @@ update_script() {
|
||||
debug_step "Делаем скрипт исполняемым"
|
||||
chmod +x "$LOCAL_SCRIPT_PATH"
|
||||
|
||||
# sac-client.sh должен лежать рядом с ssh-monitor (тот же каталог)
|
||||
SAC_CLIENT_LOCAL="${LOCAL_SCRIPT_PATH%/*}/sac-client.sh"
|
||||
SAC_CLIENT_REMOTE="$UPDATE_DIR/$SCRIPT_NAME/sac-client.sh"
|
||||
if [ -f "$SAC_CLIENT_REMOTE" ]; then
|
||||
debug_step "Копируем sac-client.sh"
|
||||
cp "$SAC_CLIENT_REMOTE" "$SAC_CLIENT_LOCAL"
|
||||
chmod 644 "$SAC_CLIENT_LOCAL"
|
||||
log_message "INFO" "sac-client.sh updated."
|
||||
fi
|
||||
|
||||
script_changed=1
|
||||
log_message "INFO" "Script updated successfully."
|
||||
debug_step "Скрипт успешно обновлен"
|
||||
|
||||
# Перезапускаем сервис
|
||||
debug_step "Перезапускаем сервис ssh-monitor.service"
|
||||
if command -v systemctl &>/dev/null; then
|
||||
if systemctl restart ssh-monitor.service 2>/dev/null; then
|
||||
log_message "INFO" "Service restarted successfully."
|
||||
debug_step "Сервис успешно перезапущен"
|
||||
else
|
||||
log_message "INFO" "WARNING: Failed to restart service (may not be running)"
|
||||
debug_step "ПРЕДУПРЕЖДЕНИЕ: Не удалось перезапустить сервис"
|
||||
fi
|
||||
else
|
||||
log_message "INFO" "systemctl not found, service not restarted"
|
||||
debug_step "systemctl не найден, сервис не перезапущен"
|
||||
fi
|
||||
else
|
||||
log_message "INFO" "Checksums match. No update needed."
|
||||
debug_step "Контрольные суммы совпадают, обновление не требуется"
|
||||
@@ -333,6 +389,10 @@ update_script() {
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$script_changed" -eq 1 ] || [ "${SAC_CLIENT_CHANGED:-0}" -eq 1 ]; then
|
||||
restart_ssh_monitor_service
|
||||
fi
|
||||
|
||||
# Логируем значения переменных скрипта при DEBUG=1
|
||||
log_script_vars
|
||||
|
||||
|
||||
Reference in New Issue
Block a user