fix: sync /opt/scripts/update_ssh_monitor.sh from git clone each run
After git pull, copy updater from clone to DEPLOY_INSTALL_PATH and re-exec once so cron always picks up new logging without manual cp.
This commit is contained in:
@@ -157,6 +157,14 @@ sudo /opt/scripts/update_ssh_monitor.sh
|
|||||||
sudo tail -40 /var/log/update_script.log
|
sudo tail -40 /var/log/update_script.log
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Важно:** после `git pull` в клоне скрипт **сам обновляет** `/opt/scripts/update_ssh_monitor.sh` из репозитория и один раз перезапускает себя (если вызывали именно этот путь). Если в логе старые строки вроде `Checksums match` без блока «Итог обновления» — на сервере ещё старая копия updater; один раз:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo cp /opt/scripts/update/ssh-monitor/update_ssh_monitor.sh /opt/scripts/update_ssh_monitor.sh
|
||||||
|
sudo chmod 750 /opt/scripts/update_ssh_monitor.sh
|
||||||
|
sudo /opt/scripts/update_ssh_monitor.sh
|
||||||
|
```
|
||||||
|
|
||||||
## Ограничения
|
## Ограничения
|
||||||
|
|
||||||
- Обновляется **только** файл **`ssh-monitor`**, не конфиг и не watchdog.
|
- Обновляется **только** файл **`ssh-monitor`**, не конфиг и не watchdog.
|
||||||
|
|||||||
+51
-2
@@ -20,6 +20,7 @@ SUMMARY_SAC_REASON="—"
|
|||||||
SUMMARY_CONFIG="—"
|
SUMMARY_CONFIG="—"
|
||||||
SUMMARY_GIT="—"
|
SUMMARY_GIT="—"
|
||||||
SUMMARY_SERVICE_RESTART="—"
|
SUMMARY_SERVICE_RESTART="—"
|
||||||
|
SUMMARY_UPDATER="—"
|
||||||
|
|
||||||
CONFIG_FILE="/etc/ssh-monitor.conf"
|
CONFIG_FILE="/etc/ssh-monitor.conf"
|
||||||
DEPLOY_INSTALL_PATH="/opt/scripts/update_ssh_monitor.sh"
|
DEPLOY_INSTALL_PATH="/opt/scripts/update_ssh_monitor.sh"
|
||||||
@@ -251,6 +252,7 @@ log_update_summary() {
|
|||||||
log_action "sac-client.sh: $SUMMARY_SAC_CLIENT ($SUMMARY_SAC_REASON)"
|
log_action "sac-client.sh: $SUMMARY_SAC_CLIENT ($SUMMARY_SAC_REASON)"
|
||||||
log_action "конфиг: $SUMMARY_CONFIG"
|
log_action "конфиг: $SUMMARY_CONFIG"
|
||||||
log_action "git: $SUMMARY_GIT"
|
log_action "git: $SUMMARY_GIT"
|
||||||
|
log_action "updater ($DEPLOY_INSTALL_PATH): $SUMMARY_UPDATER"
|
||||||
log_action "перезапуск ssh-monitor.service: $SUMMARY_SERVICE_RESTART"
|
log_action "перезапуск ssh-monitor.service: $SUMMARY_SERVICE_RESTART"
|
||||||
log_action "полный лог: $LOG_FILE"
|
log_action "полный лог: $LOG_FILE"
|
||||||
log_action "==========================="
|
log_action "==========================="
|
||||||
@@ -608,6 +610,51 @@ deploy_post_install() {
|
|||||||
print_config_variables_help
|
print_config_variables_help
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Копирует update_ssh_monitor.sh из git-клона в /opt/scripts/ и при необходимости re-exec.
|
||||||
|
sync_installed_updater_from_clone() {
|
||||||
|
local remote="$UPDATE_DIR/$SCRIPT_NAME/update_ssh_monitor.sh"
|
||||||
|
local self installed_path remote_sum installed_sum=""
|
||||||
|
|
||||||
|
if [ ! -f "$remote" ]; then
|
||||||
|
SUMMARY_UPDATER="не найден в клоне"
|
||||||
|
log_action "updater: в клоне нет $remote"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
self="$(readlink -f "$0" 2>/dev/null || realpath "$0" 2>/dev/null || printf '%s' "$0")"
|
||||||
|
installed_path="$(readlink -f "$DEPLOY_INSTALL_PATH" 2>/dev/null || realpath "$DEPLOY_INSTALL_PATH" 2>/dev/null || printf '%s' "$DEPLOY_INSTALL_PATH")"
|
||||||
|
remote_sum=$(file_sha256 "$remote")
|
||||||
|
if [ -f "$DEPLOY_INSTALL_PATH" ]; then
|
||||||
|
installed_sum=$(file_sha256 "$DEPLOY_INSTALL_PATH")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$remote_sum" = "$installed_sum" ]; then
|
||||||
|
SUMMARY_UPDATER="актуален (sha ${remote_sum:0:16}…)"
|
||||||
|
log_action "updater: $DEPLOY_INSTALL_PATH совпадает с git (commit $(get_git_short_rev "$UPDATE_DIR/$SCRIPT_NAME"))"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$DEPLOY_INSTALL_PATH")"
|
||||||
|
if ! cp "$remote" "$DEPLOY_INSTALL_PATH"; then
|
||||||
|
SUMMARY_UPDATER="ошибка копирования"
|
||||||
|
log_action "ERROR: не удалось обновить $DEPLOY_INSTALL_PATH из git"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
chmod 750 "$DEPLOY_INSTALL_PATH"
|
||||||
|
SUMMARY_UPDATER="обновлён из git (${installed_sum:0:8}…→${remote_sum:0:8}…)"
|
||||||
|
log_action "updater: записан $DEPLOY_INSTALL_PATH из клона (новый sha ${remote_sum:0:16}…)"
|
||||||
|
|
||||||
|
if [ "$self" = "$installed_path" ] && [ "${UPDATER_REEXEC_GUARD:-0}" != "1" ]; then
|
||||||
|
log_action "updater: перезапуск с новой версией (расширенный лог)…"
|
||||||
|
UPDATER_REEXEC_GUARD=1 exec /bin/bash "$DEPLOY_INSTALL_PATH" "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$self" != "$installed_path" ]; then
|
||||||
|
log_action "updater: сейчас запущен $self — в cron используйте $DEPLOY_INSTALL_PATH"
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
restart_ssh_monitor_service() {
|
restart_ssh_monitor_service() {
|
||||||
debug_step "Перезапускаем сервис ssh-monitor.service"
|
debug_step "Перезапускаем сервис ssh-monitor.service"
|
||||||
if command -v systemctl &>/dev/null; then
|
if command -v systemctl &>/dev/null; then
|
||||||
@@ -627,7 +674,7 @@ restart_ssh_monitor_service() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Функция для обновления скрипта
|
# Функция для обновления скрипта (принимает "$@" для re-exec updater)
|
||||||
update_script() {
|
update_script() {
|
||||||
local git_repo="$UPDATE_DIR/$SCRIPT_NAME"
|
local git_repo="$UPDATE_DIR/$SCRIPT_NAME"
|
||||||
local git_before="" git_after="" pull_ok=1
|
local git_before="" git_after="" pull_ok=1
|
||||||
@@ -693,6 +740,8 @@ update_script() {
|
|||||||
log_action "git clone: успех (commit $git_after)"
|
log_action "git clone: успех (commit $git_after)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
sync_installed_updater_from_clone "$@"
|
||||||
|
|
||||||
actual_script_path="$(find_remote_ssh_monitor_path 2>/dev/null || true)"
|
actual_script_path="$(find_remote_ssh_monitor_path 2>/dev/null || true)"
|
||||||
debug_step "Путь к ssh-monitor в клоне: ${actual_script_path:-не найден}"
|
debug_step "Путь к ssh-monitor в клоне: ${actual_script_path:-не найден}"
|
||||||
|
|
||||||
@@ -814,7 +863,7 @@ if ! ensure_ipset_installed; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
update_script
|
update_script "$@"
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|
||||||
if [ "$exit_code" -eq 0 ] && [ "$DEPLOY_MODE" -eq 1 ]; then
|
if [ "$exit_code" -eq 0 ] && [ "$DEPLOY_MODE" -eq 1 ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user