ncc.zabbix_fbsd_templates
2025-06-01
Parent:084000e4f9b6
ncc.zabbix_fbsd_templates/src/aw.fbsd-mon-helper/lib/fbsd_up.sh
.. v1.r202506.1 + Контроль запуска freebsd-update раз в 4 часа внутри скрипта, что позволяет запускать сам скрипт чаще. В инструкции по развёртыванию указано раз 15 минут + Контроль наличия запущенных процессов pkg, что позволит иметь меньше ошибок совместного использования БД пакетов системы
| awgur@0 | 1 #!/bin/sh |
| awgur@0 | 2 # Работа с обновлениями FreeBSD |
| awgur@0 | 3 |
| awgur@12 | 4 v_fbsd_up_binary="/usr/sbin/freebsd-update --not-running-from-cron" |
| awgur@0 | 5 v_fbsd_up_out="$STATE_ROOT/fbsd_update" |
| awgur@0 | 6 v_fbsd_up_status="$STATE_ROOT/fbsd_update.status" |
| awgur@0 | 7 v_fbsd_up_current_ver="$STATE_ROOT/fbsd_update.versions" |
| awgur@18 | 8 v_fbsd_up_action_flag="$STATE_ROOT/fbsd_update.action.flag" |
| awgur@0 | 9 |
| awgur@0 | 10 |
| awgur@0 | 11 fbsd_up_init () { |
| awgur@0 | 12 $v_fbsd_up_binary fetch > "$v_fbsd_up_out" |
| awgur@0 | 13 } |
| awgur@0 | 14 |
| awgur@0 | 15 |
| awgur@0 | 16 fbsd_up_status () { |
| awgur@0 | 17 echo "$1" > "$v_fbsd_up_status" |
| awgur@0 | 18 } |
| awgur@0 | 19 |
| awgur@0 | 20 |
| awgur@0 | 21 fbsd_up_versions () { |
| awgur@0 | 22 printf "userland=%s\nkernel=%s\nkcurrent=%s\n" \ |
| awgur@0 | 23 "$(/bin/freebsd-version -u)" \ |
| awgur@0 | 24 "$(/bin/freebsd-version -k)" \ |
| awgur@0 | 25 "$(/bin/freebsd-version -r)" \ |
| awgur@0 | 26 > "${v_fbsd_up_current_ver}" |
| awgur@0 | 27 } |
| awgur@0 | 28 |
| awgur@18 | 29 fbsd_up_check_action_flag () { |
| awgur@18 | 30 local res _act_flag |
| awgur@18 | 31 |
| awgur@18 | 32 res="$(( $(date '+%s') / 14400 ))" |
| awgur@18 | 33 _act_flag="$(cat "$v_fbsd_up_action_flag")" |
| awgur@18 | 34 |
| awgur@18 | 35 if [ -z "$_act_flag" ] || [ "$res" -ne "$_act_flag" ] ; then |
| awgur@18 | 36 echo "$res" | tee "$v_fbsd_up_action_flag" |
| awgur@18 | 37 fi |
| awgur@18 | 38 } |
| awgur@18 | 39 |
| awgur@0 | 40 |
| awgur@0 | 41 fbsd_up_do () { |
| awgur@18 | 42 local _action_flag _ret |
| awgur@18 | 43 |
| awgur@0 | 44 log_start "fbsd_up_do" |
| awgur@0 | 45 |
| awgur@18 | 46 _action_flag="$(fbsd_up_check_action_flag)" |
| awgur@18 | 47 if [ -z "$_action_flag" ] ; then |
| awgur@18 | 48 log "Not need to update: old action mark" |
| awgur@0 | 49 |
| awgur@18 | 50 else |
| awgur@18 | 51 log "New action flag '${_action_flag}' - updating" |
| awgur@18 | 52 fbsd_up_init |
| awgur@18 | 53 fbsd_up_versions |
| awgur@18 | 54 { |
| awgur@18 | 55 $v_fbsd_up_binary updatesready |
| awgur@18 | 56 _ret="$?" |
| awgur@0 | 57 |
| awgur@18 | 58 case "$_ret" in |
| awgur@18 | 59 0 ) |
| awgur@18 | 60 if [ "$(cat "$v_fbsd_up_status")" != "NEED UPDATE" ]; then |
| awgur@18 | 61 mail -s "$(hostname -f): FREEBSD UPDATE NEEDED" "$ADMIN_MAIL" < "$v_fbsd_up_out" |
| awgur@18 | 62 fi |
| awgur@0 | 63 |
| awgur@18 | 64 fbsd_up_status "NEED UPDATE" |
| awgur@0 | 65 ;; |
| awgur@0 | 66 |
| awgur@18 | 67 1 ) |
| awgur@18 | 68 fbsd_up_status "RUN ERROR" |
| awgur@18 | 69 ;; |
| awgur@18 | 70 |
| awgur@18 | 71 2 ) |
| awgur@18 | 72 fbsd_up_status "OK" |
| awgur@18 | 73 ;; |
| awgur@0 | 74 |
| awgur@18 | 75 * ) |
| awgur@18 | 76 fbsd_up_status "RUN ERROR" |
| awgur@18 | 77 log_err "fbsd_up: updatesready return unknown code ${_ret}" |
| awgur@18 | 78 ;; |
| awgur@0 | 79 esac |
| awgur@18 | 80 } 2>&1 | log |
| awgur@18 | 81 fi |
| awgur@0 | 82 |
| awgur@0 | 83 log_end |
| awgur@0 | 84 } |