Скрипт бэкапа настроек и журнала

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

Приветствую всех!

Выкладываю скрипт резервного копирования настроек и журнала устройства с автоматическим определением местоположения хранилища...
Имею в своём хозяйстве разношёрстные устройства от Mikrotik и каждое из них обладает своими особенностями сохранения данных: где-то используется внешний USB-накопитель, где-то встроенный flash-диск устройства. На части устройств встроенный диск по умолчанию называется 'flash', а на другой части никак не называется :-):

Захотелось изобразить универсальный бэкап-скрипт, который одинаково хорошо сохранял бы все настройки и журналы на любом из этих устройств, будучи единожды настроенным. Идею подсмотрел здесь: viewtopic.php?t=7357. Вот что из этого получилось:

Код: Выделить всё




# Script save settings and deleting old files
# Script uses ideas by maksim.geynsberg, Jotne, rextended, Sertik, drPioneer
# https://forummikrotik.ru/viewtopic.php?p=91135#p91135
# tested on ROS 6.49.10 & 7.12
# updated 2024/02/06

:do {
  :local maxDaysAgo 180;    # maximum archive depth
  :local autoDiskSel true;  # automatic disk selection
  :local diskName "flash";  # setting disk name

  # --------------------------------------------------- # automatic disk selection function
  :local DiskFinder do={
    :local extDisks ""; :local dskName "";
    :local allDisks [:toarray [/file find type="disk"]];
    :do {:set extDisks [:toarray [/disk find]]} on-error={}
    :local cntAllDisk [:len $allDisks]; :local cntExtDisk [:len $extDisks];
    :if ($cntAllDisk!=0) do={:set dskName [/file get [($allDisks->0)] name]}
    :do {:if ($cntExtDisk!=0) do={:set dskName [/disk get [($extDisks->0)] name]}} on-error={}
    :return $dskName;
  }

  # --------------------------------------------------- # time translation function to UNIX-time
  :local DateTime2Epoch do={                            # https://forum.mikrotik.com/viewtopic.php?t=75555#p994849
    :local dTime [:tostr $1]; :local yesterDay false;   # parses date formats:  "hh:mm:ss","mm-dd hh:mm:ss",
    /system clock;                                      # "mmm/dd hh:mm:ss","mmm/dd/yyyy hh:mm:ss","yyyy-mm-dd hh:mm:ss"
    :local cYear [get date]; :if ($cYear~"....-..-..") do={:set cYear [:pick $cYear 0 4]} else={:set cYear [:pick $cYear 7 11]}
    :if ([:len $dTime]=10 or [:len $dTime]=11) do={:set dTime "$dTime 00:00:00"}
    :if ([:len $dTime]=15) do={:set dTime "$[:pick $dTime 0 6]/$cYear $[:pick $dTime 7 15]"}
    :if ([:len $dTime]=14) do={:set dTime "$cYear-$[:pick $dTime 0 5] $[:pick $dTime 6 14]"}
    :if ([:len $dTime]=8) do={:if ([:totime $1]>[get time]) do={:set yesterDay true}; :set dTime "$[get date] $dTime"}
    :if ([:tostr $1]="") do={:set dTime ("$[get date] $[get time]")}
    :local vDate [:pick $dTime 0 [:find $dTime " " -1]];
    :local vTime [:pick $dTime ([:find $dTime " " -1]+1) [:len $dTime]];
    :local vGmt [get gmt-offset]; :if ($vGmt>0x7FFFFFFF) do={:set vGmt ($vGmt-0x100000000)}
    :if ($vGmt<0) do={:set vGmt ($vGmt*-1)}
    :local arrMn [:toarray "0,0,31,59,90,120,151,181,212,243,273,304,334"];
    :local vdOff [:toarray "0,4,5,7,8,10"];
    :local month [:tonum [:pick $vDate ($vdOff->2) ($vdOff->3)]];
    :if ($vDate~".../../....") do={
      :set vdOff [:toarray "7,11,1,3,4,6"];
      :set month ([:find "xxanebarprayunulugepctovecANEBARPRAYUNULUGEPCTOVEC" [:pick $vDate ($vdOff->2) ($vdOff->3)] -1]/2);
      :if ($month>12) do={:set month ($month-12)}
    }
    :local year [:pick $vDate ($vdOff->0) ($vdOff->1)]; :if ((($year-1968)%4)=0) do={:set ($arrMn->1) -1; :set ($arrMn->2) 30}
    :local toTd ((($year-1970)*365)+(($year-1968)/4)+($arrMn->$month)+([:pick $vDate ($vdOff->4) ($vdOff->5)]-1));
    :if ($yesterDay) do={:set toTd ($toTd-1)};                                      # bypassing ROS6.xx time format problem after 00:00:00
    :return (((((($toTd*24)+[:pick $vTime 0 2])*60)+[:pick $vTime 3 5])*60)+[:pick $vTime 6 8]-$vGmt);
  }

  # --------------------------------------------------- # time conversion function from UNIX-time
  :local UnixToDateTime do={                            # https://forum.mikrotik.com/viewtopic.php?p=977170#p977170
    :local ZeroFill do={:return [:pick (100+$1) 1 3]}
    :local prMntDays [:toarray "0,0,31,59,90,120,151,181,212,243,273,304,334"];
    :local vGmt [:tonum [/system clock get gmt-offset]]; :if ($vGmt>0x7FFFFFFF) do={:set vGmt ($vGmt-0x100000000)}
    :if ($vGmt<0) do={:set vGmt ($vGmt*-1)}
    :local tzEpoch ($vGmt+[:tonum $1]);
    :if ($tzEpoch<0) do={:set tzEpoch 0};               # unsupported negative unix epoch
    :local yearStart (1970+($tzEpoch/31536000));
    :local tmpLeap (($yearStart-1968)/4); :if ((($yearStart-1968)%4)=0) do={:set ($prMntDays->1) -1; :set ($prMntDays->2) 30}
    :local tmpSec ($tzEpoch%31536000);
    :local tmpDays (($tmpSec/86400)-$tmpLeap);
    :if ($tmpSec<(86400*$tmpLeap) && (($yearStart-1968)%4)=0) do={
      :set tmpLeap ($tmpLeap-1); :set ($prMntDays->1) 0; :set ($prMntDays->2) 31; :set tmpDays ($tmpDays+1);
    }
    :if ($tmpSec<(86400*$tmpLeap)) do={:set yearStart ($yearStart-1); :set tmpDays ($tmpDays+365)}
    :local mnthStart 12 ; :while (($prMntDays->$mnthStart)>$tmpDays) do={:set mnthStart ($mnthStart-1)}
    :local dayStart [$ZeroFill (($tmpDays+1)-($prMntDays->$mnthStart))];
    :local timeStart (00:00:00+[:totime ($tmpSec%86400)]);
    :return "$yearStart/$[$ZeroFill $mnthStart]/$[$ZeroFill $dayStart] $timeStart";
  }

  # --------------------------------------------------- # main body of the script
  :local nameID [system identity get name]; :local filterName "";
  :local hddFree 0; :local cntExtDsk 0;
  :put "$[system clock get time]\tStart saving settings and deleting old files on '$nameID' router";
  :if ($autoDiskSel) do={
    :set $diskName [$DiskFinder];
    :put "$[system clock get time]\tAutomatic disk selection is ACTIVATED";
  } else={:put "$[system clock get time]\tDisk is specified by user is ACTIVATED"}
  :put "$[system clock get time]\tWork is done on disk '$diskName'";
  :if ([:len $diskName]!=0) do={:set filterName "$diskName/$nameID_"} else={:set filterName "$nameID_"}
  :do {:set cntExtDsk [:len [/disk find]]} on-error={}
  :do {
    :foreach fileIndex in=[/file find] do={
      :local secondsAgo ($maxDaysAgo*86400);
      :local fileName [/file get number=$fileIndex name];
      :local fileTime [$DateTime2Epoch [/file get number=$fileIndex creation-time]];
      :local timeDiff ([$DateTime2Epoch ""]-$fileTime);
      :if (($timeDiff>=$secondsAgo) && ([file get number=$fileIndex name]~$filterName)) do={
        /file remove [find name~$fileName];
        :put "$[system clock get time]\tDeleting outdated file '$fileName'";
      }
    }
    :set hddFree ([/system resource get free-hdd-space]/([/system resource get total-hdd-space]/100));
    :set maxDaysAgo ($maxDaysAgo-1);
  } while=($hddFree<5 && $cntExtDsk=0 && $maxDaysAgo>0);
  :if ($maxDaysAgo>0) do={
    :local monthsOfYear ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
    :local currentTime [$UnixToDateTime [$DateTime2Epoch ""]];
    :local currentYear [:pick $currentTime 0 4];
    :local currentMonth ($monthsOfYear->[([:pick $currentTime 5 7] -1)]);
    :local currentDay [:pick $currentTime 8 10];
    :local fileNameCreate ($filterName.$currentYear.$currentMonth.$currentDay);
    :put "$[system clock get time]\tGenerating new file name '$fileNameCreate'";
    :put "$[system clock get time]\tSaving a backup copy";
    /system backup save name=$fileNameCreate;
    :put "$[system clock get time]\tSaving system settings";
    /export file=$fileNameCreate;
    :put "$[system clock get time]\tSaving device log";
    /log print file=$fileNameCreate;
  } else={
    :put "$[system clock get time]\tNo disk space, free up disk space";
    /log warning ("No disk space, free up disk space for backup");
  }
  :put "$[system clock get time]\tEnd of saving settings and delete old files";
} on-error={/log warning ("Error backup troubles")}


По задумке, один раз настроив скрипт, нужно просто запустить его на устройстве, а скрипт уже сам разберётся что и куда он будет сохранять.
По умолчанию в настройках скрипта задана глубина архива =180 дней. При необходимости можно изменить это значение в переменной 'maxDaysAgo'.
При запуске скрипта происходит следующее:
  • определяется место для хранения данных (приоритеты в порядке убывания: внешний накопитель, встроенный накопитель)
  • генерится имя для будущих файлов по шаблону: 'Диск\ИмяРоутера_ТекущаяДата'
  • удаляются все файлы старше глубины архива подходящие под шаблон: 'Диск\ИмяРоутера_'
  • удаляются файлы, младше глубины архива, но при условии, что свободного места на диске не менее 4%.
  • сохраняются бэкап-файл, экспорт-файл, файл журнала со сгенеренными в п.2 именами.
Скрипт снижает глубину архива если на диске мало места. Когда на диске менее 5% свободного места - бэкап не производится, а сей факт отражается в журнале устройства.
В скрипте предусмотрена возможность отключения автоопределения места хранения данных, для этого переменной 'autoDiskSel' нужно задать значение 'false', а в переменной 'diskName' потребуется указать актуальное имя накопителя (по умолчанию задано имя "flash").
В рабочем варианте у меня скрипт запускается по шедулеру один раз в сутки.
Допускаю в скрипте наличие косяков, поэтому приму любые замечания по его работе.

Зеркало.
Последний раз редактировалось drpioneer 06 фев 2024, 10:14, всего редактировалось 13 раз.


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Приветствую, друг !

Я бы просил ещё добавить возможность записи не только бинарного, но и скриптового файла конфигурации и сохранения конфигурации по частям типа такого:

/ip address export file=($folder."/ip.rsc")
/ip firewall mangle export file=($folder."/mangle.rsc")
/ip firewall nat export file=($folder."/nat.rsc")
/ip firewall filter export file=($folder."/filter.rsc")
/ip dns export file=($folder."/dns.rsc")
/export verbose file=($folder."/backup.rsc")
/system script export file=($folder."/script.rsc")
/system scheduler export file=($folder."/scheduler.rsc")
/tool e-mail export file=($folder."/email.rsc")
/ip firewall address-list export file=($folder."/address-list.rsc")
/ip route export file=($folder."/route.rsc")
/ip dhcp-server network export file=($folder."/network.rsc")
/queue type export file=($folder."/type.rsc")
/queue tree export file=($folder."/tree.rsc")
/queue simple export file=($folder."/simple.rsc")
/interface ethernet export file=($folder."/ethernet.rsc")
/ip pool export file=($folder."/pool.rsc")
/ppp profile export file=($folder."/profile.rsc")

Иногда очень нужно бывает ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

Sertik писал(а): 25 мар 2022, 19:44 ...
Я бы просил ещё добавить возможность записи не только бинарного, но и скриптового файла конфигурации и сохранения конфигурации по частям типа такого:
...
Иногда очень нужно бывает ...
Привет!

Файл конфигурации в виде скрипта сохраняется, вот соответствующая строка кода:

Код: Выделить всё

/export file=$fileNameCreate;
Не вижу смысла дробить его на кучку маленьких файликов, которые будут содержать ту же самую информацию.
Кому надо - сами найдут и вытащат её из этого файла... Сам так иногда делаю :-)


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Чуть доработал скрипт нашего уважаемого DrPioneer - превратил его в функцию и добавил возможность дополнительно сохранять настройки по частям. Код ниже:

Код: Выделить всё

# Script save settings and deleting old files
# https://forummikrotik.ru/viewtopic.php?p=84538#p84538
# Idea: https://forummikrotik.ru/viewtopic.php?t=7357
# tested on ROS 6.49.3
# updated 2022/04/03

# used:
# [$FuncBackup] - save basic settings
# [$FuncBackup "&parts"] - advanced + saving settings by frequency

:global FuncBackup do={
:if ([:len $0]!=0) do={
:do {
    :local daysAgo 30;
    :local autoDiskSelection false;
    :local diskName "flash";

    # Automatic disk selection function
    :local DiskFinder do={
        :local dskName "";
        :local allDisks [:toarray [/file find type="disk"]];
        :local extDisks [:toarray [/disk find]];
        :local cntAllDisk [:len $allDisks];
        :local cntExtDisk [:len $extDisks];
        :if ($cntAllDisk!=0) do={:set dskName [/file get [($allDisks->0)] name]}
        :if ($cntExtDisk!=0) do={:set dskName [/disk get [($extDisks->0)] name]}
        :return ($dskName);
    }

    # Main body of the script
    :local nameID [system identity get name];
    :local currentDate [system clock get date];
    :put "$[system clock get time] - Start saving settings and deleting old files on '$nameID' router.";
    :if ($autoDiskSelection) do={
        :set $diskName [$DiskFinder];
        :put "$[system clock get time] - Automatic disk selection is ACTIVATED.";
    } else={
        :put "$[system clock get time] - Disk is specified by user is ACTIVATED.";
    }
    :put "$[system clock get time] - Work is done on disk: '$diskName'.";
    :local filterName "";
    :if ([:len $diskName]!=0) do={
        :set filterName ($diskName."/".$nameID."_");
    } else={
        :set filterName ($nameID."_");
    }
    :local monthsOfYear ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
    :local currentDay   [:pick $currentDate 4 6 ];
    :local currentMonth [:pick $currentDate 0 3 ];
    :local currentYear  [:pick $currentDate 7 11];
    :local idxCurrMonth ([:find $monthsOfYear $currentMonth -1 ] +1);
    :foreach fileIndex in=[file find] do={
        :do {
            :local fileDate   [file get number=$fileIndex creation-time];
            :set   fileDate   [:pick $fileDate 0 11];
            :local fileMonth  [:pick $fileDate 0 3 ];
            :set   fileMonth ([:find $monthsOfYear $fileMonth -1 ] +1);
            :local fileDay    [:pick $fileDate 4 6 ];
            :local fileYear   [:pick $fileDate 7 11];
            :local fileName   [file get number=$fileIndex name];
            :local sum 0;
            :set sum ($sum + (($currentYear  - $fileYear)  * 365));
            :set sum ($sum + (($idxCurrMonth - $fileMonth) * 30 ));
            :set sum ($sum + ($currentDay - $fileDay));
            :if ($sum >= $daysAgo && [file get number=$fileIndex name]~$filterName) do={
                /file remove [find name~$fileName];
                :put "$[system clock get time] - Deleting outdated file: '$fileName'.";
            }
        } on-error={ /log error ("Script error. Error deleting outdated files.") }
    }
    :local fileNameCreate ($filterName.$currentYear.$currentMonth.$currentDay);
    :put "$[system clock get time] - Generating new file name: '$fileNameCreate'";
    :put "$[system clock get time] - Saving a backup copy.";
    :log warning ("Start Backuping files ... ");
    /system backup save name=$fileNameCreate;
    :put "$[system clock get time] - Saving system settings.";
    /export file=$fileNameCreate;
    :put "$[system clock get time] - Saving scripts in file.";
    /system script export file=("$fileNameCreate"."script");
    :put "$[system clock get time] - Saving device log.";
    /log print file=$fileNameCreate;
:if ($1="&parts") do={ 
    :put "$[system clock get time] - Saving Backup files parts.";
    /ip address export file=("$fileNameCreate"."address")
    /ip firewall mangle export file=("$fileNameCreate"."mangle")
    /ip firewall nat export file=("$fileNameCreate".nat")
    /ip firewall filter export file=("$fileNameCreate"."filter")
    /ip dns export file=("$fileNameCreate."dns")
    /system scheduler export file=("$fileNameCreate"."scheduler")
    /tool e-mail export file=($fileNameCreate."email")
    /tool sms export file=($fileNameCreate."sms")
    /ip firewall address-list export file=($fileNameCreate."address-list")
    /ip route export file=("$fileNameCreate"."route")
    /ip dhcp-server network export file=("$fileNameCreate"."network")
    /queue type export file=("$fileNameCreate"."type")
    /queue tree export file=("$fileNameCreate"."tree")
    /queue simple export file=("$fileNameCreate"."simple")
    /interface ethernet export file=("$fileNameCreate"."ethernet")
    /ip pool export file=("$fileNameCreate"."pool")
    /ppp profile export file=("$fileNameCreate"."profile")
}
    /log warning "Backup completed successfully.";
    :put "$[system clock get time] - End of saving settings and delete old files on '$nameID' router .";
    :return "Backup done";
} on-error={ /log error ("Script error. Backup troubles."); :return ("Error functions $0 Backup troubles")}

 }
}


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
DeZ641
Сообщения: 5
Зарегистрирован: 03 июл 2020, 09:35

Sertik писал(а): 03 апр 2022, 20:06 Чуть доработал скрипт нашего уважаемого DrPioneer - превратил его в функцию и добавил возможность дополнительно сохранять настройки по частям. Код ниже:

Код: Выделить всё

# Script save settings and deleting old files
# https://forummikrotik.ru/viewtopic.php?p=84538#p84538
# Idea: https://forummikrotik.ru/viewtopic.php?t=7357
# tested on ROS 6.49.3
# updated 2022/04/03

# used:
# [$FuncBackup] - save basic settings
# [$FuncBackup "&parts"] - advanced + saving settings by frequency

:global FuncBackup do={
:if ([:len $0]!=0) do={
:do {
    :local daysAgo 30;
    :local autoDiskSelection false;
    :local diskName "flash";

    # Automatic disk selection function
    :local DiskFinder do={
        :local dskName "";
        :local allDisks [:toarray [/file find type="disk"]];
        :local extDisks [:toarray [/disk find]];
        :local cntAllDisk [:len $allDisks];
        :local cntExtDisk [:len $extDisks];
        :if ($cntAllDisk!=0) do={:set dskName [/file get [($allDisks->0)] name]}
        :if ($cntExtDisk!=0) do={:set dskName [/disk get [($extDisks->0)] name]}
        :return ($dskName);
    }

    # Main body of the script
    :local nameID [system identity get name];
    :local currentDate [system clock get date];
    :put "$[system clock get time] - Start saving settings and deleting old files on '$nameID' router.";
    :if ($autoDiskSelection) do={
        :set $diskName [$DiskFinder];
        :put "$[system clock get time] - Automatic disk selection is ACTIVATED.";
    } else={
        :put "$[system clock get time] - Disk is specified by user is ACTIVATED.";
    }
    :put "$[system clock get time] - Work is done on disk: '$diskName'.";
    :local filterName "";
    :if ([:len $diskName]!=0) do={
        :set filterName ($diskName."/".$nameID."_");
    } else={
        :set filterName ($nameID."_");
    }
    :local monthsOfYear ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
    :local currentDay   [:pick $currentDate 4 6 ];
    :local currentMonth [:pick $currentDate 0 3 ];
    :local currentYear  [:pick $currentDate 7 11];
    :local idxCurrMonth ([:find $monthsOfYear $currentMonth -1 ] +1);
    :foreach fileIndex in=[file find] do={
        :do {
            :local fileDate   [file get number=$fileIndex creation-time];
            :set   fileDate   [:pick $fileDate 0 11];
            :local fileMonth  [:pick $fileDate 0 3 ];
            :set   fileMonth ([:find $monthsOfYear $fileMonth -1 ] +1);
            :local fileDay    [:pick $fileDate 4 6 ];
            :local fileYear   [:pick $fileDate 7 11];
            :local fileName   [file get number=$fileIndex name];
            :local sum 0;
            :set sum ($sum + (($currentYear  - $fileYear)  * 365));
            :set sum ($sum + (($idxCurrMonth - $fileMonth) * 30 ));
            :set sum ($sum + ($currentDay - $fileDay));
            :if ($sum >= $daysAgo && [file get number=$fileIndex name]~$filterName) do={
                /file remove [find name~$fileName];
                :put "$[system clock get time] - Deleting outdated file: '$fileName'.";
            }
        } on-error={ /log error ("Script error. Error deleting outdated files.") }
    }
    :local fileNameCreate ($filterName.$currentYear.$currentMonth.$currentDay);
    :put "$[system clock get time] - Generating new file name: '$fileNameCreate'";
    :put "$[system clock get time] - Saving a backup copy.";
    :log warning ("Start Backuping files ... ");
    /system backup save name=$fileNameCreate;
    :put "$[system clock get time] - Saving system settings.";
    /export file=$fileNameCreate;
    :put "$[system clock get time] - Saving scripts in file.";
    /system script export file=("$fileNameCreate"."script");
    :put "$[system clock get time] - Saving device log.";
    /log print file=$fileNameCreate;
:if ($1="&parts") do={ 
    :put "$[system clock get time] - Saving Backup files parts.";
    /ip address export file=("$fileNameCreate"."address")
    /ip firewall mangle export file=("$fileNameCreate"."mangle")
    /ip firewall nat export file=("$fileNameCreate".nat")
    /ip firewall filter export file=("$fileNameCreate"."filter")
    /ip dns export file=("$fileNameCreate."dns")
    /system scheduler export file=("$fileNameCreate"."scheduler")
    /tool e-mail export file=($fileNameCreate."email")
    /tool sms export file=($fileNameCreate."sms")
    /ip firewall address-list export file=($fileNameCreate."address-list")
    /ip route export file=("$fileNameCreate"."route")
    /ip dhcp-server network export file=("$fileNameCreate"."network")
    /queue type export file=("$fileNameCreate"."type")
    /queue tree export file=("$fileNameCreate"."tree")
    /queue simple export file=("$fileNameCreate"."simple")
    /interface ethernet export file=("$fileNameCreate"."ethernet")
    /ip pool export file=("$fileNameCreate"."pool")
    /ppp profile export file=("$fileNameCreate"."profile")
}
    /log warning "Backup completed successfully.";
    :put "$[system clock get time] - End of saving settings and delete old files on '$nameID' router .";
    :return "Backup done";
} on-error={ /log error ("Script error. Backup troubles."); :return ("Error functions $0 Backup troubles")}

 }
}
Подскажите, а как правильно пользоваться таким кодом?
Я создал скрипт с этим кодом.
Потом создал в Scheduler запись с текстом "$FuncBackup", но вопрос, после перезагрузки снова нужно запускать скрипт?


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

В Шедуллере надо создать примерно такой код:

Код: Выделить всё

:if (![/system script environment find FuncBackup]) do={
/system script run имя_скрипта_в_котором_хранится_функция_Backup}
[$FuncBackup]
то есть если в окружении функция не установлена (например, после перезагрузки), то сначала установить её. Если она там уже есть - устанавливать не надо, просто выполнить.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
DeZ641
Сообщения: 5
Зарегистрирован: 03 июл 2020, 09:35

Sertik писал(а): 02 мар 2023, 12:37 В Шедуллере надо создать примерно такой код:

Код: Выделить всё

:if (![/system script environment find FuncBackup]) do={
/system script run имя_скрипта_в_котором_хранится_функция_Backup}
[$FuncBackup]
то есть если в окружении функция не установлена (например, после перезагрузки), то сначала установить её. Если она там уже есть - устанавливать не надо, просто выполнить.
После подсказки, вот что у меня получилось (это в Шедуллере):

Код: Выделить всё

:if ([/system script environment find $FuncBackup]) do={
             $FuncBackup
       } else={
                  /system script run BackUP-new; 
                  :delay 5; 
                  :global FuncBackup; 
                  $FuncBackup
                  }
Кстати, забыл сказать, скрипт отлично работает на ROS 7.8


Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

Обновил скрипт с учетом изменения формата даты для ROS 7.11+
Обновленный скрипт в первом сообщении топика: viewtopic.php?p=84538#p84538


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Вау ! Дружище, Вы снова с нами !


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить