Оповещения: группа «Администратор системы», блок «Кому писать» открыт; копии: адрес хранилища как в проводнике
Администратору (адрес из «Почты») — сбои (ИШ, связь с НРД, службы bj, DEPO) и обновления (новый выпуск bj, ИШ, лицензия, сертификаты); отделам — переводы и поручения. Существующие установки: администратор получает всё, что получал. Новые оповещения: «Доступно обновление bj» (раз на выпуск), «Служба … не работает / снова работает» (модули и служба ключей Валидаты). Резервные копии: \\сервер\папка или сервер + общая папка по полям → //сервер/папка; понятная причина отказа доступа. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -9,7 +9,25 @@ CRED=/etc/bj/backup-smb.cred
|
||||
STATUS=/var/lib/bj/backup-status.json
|
||||
[ -r "$CONF" ] && . "$CONF"
|
||||
SHARE=${SHARE:-}
|
||||
DIR=${DIR:-bj-backup}
|
||||
DIR=${DIR:-}
|
||||
# smbloc — адрес хранилища, как его вводят (\\nas\backup\bj как в проводнике, //nas/backup, smb://…, сервер
|
||||
# в «Хранилище» + общая папка в «Папке») → две строки: общая папка для smbclient (//сервер/папка) и путь внутри неё
|
||||
smbloc(){ python3 - "$1" "$2" <<'PY'
|
||||
import re,sys
|
||||
def parts(s):
|
||||
s=s.strip().replace('\\','/')
|
||||
m=re.match(r'(?i)smb://',s)
|
||||
if m: s=s[m.end():]
|
||||
return [p.strip() for p in s.split('/') if p.strip()]
|
||||
sp,dp=parts(sys.argv[1]),parts(sys.argv[2])
|
||||
if not sp: print(''); print('/'.join(dp)); sys.exit()
|
||||
if len(sp)==1:
|
||||
if not dp: print('//'+sp[0]); print(''); sys.exit()
|
||||
sp,dp=[sp[0],dp[0]],dp[1:]
|
||||
print('//'+sp[0]+'/'+sp[1]); print('/'.join(sp[2:]+dp))
|
||||
PY
|
||||
}
|
||||
mapfile -t _loc < <(smbloc "$SHARE" "$DIR"); SHARE=${_loc[0]:-}; DIR=${_loc[1]:-bj-backup}
|
||||
KEEP_DAYS=${KEEP_DAYS:-14}
|
||||
TS=$(date +%Y-%m-%d_%H%M)
|
||||
W=$(mktemp -d /var/tmp/bj-backup.XXXXXX)
|
||||
|
||||
Reference in New Issue
Block a user