tarampampam / mikrotik-hosts-parser

✂ Mikrotik hosts parser
MIT License
248 stars 75 forks source link

Не появляются маршруты #11

Closed homocomputeris closed 6 years ago

homocomputeris commented 6 years ago

Скрипт не выдает никаких результатов, статические маршруты не добавляются

/system script print from=Hosts
Flags: I - invalid 
 0   name="Hosts" owner="admin" policy=read,write,policy,test last-started=aug/03/2018 02:09:13 run-count=1 source=
       ## StopAD - Script for blocking advertisements, based on your defined hosts files
       ## For changing any parameters, please, use this link: https://stopad.kplus.pro/
       ##
       ## @github    <https://github.com/tarampampam/mikrotik-hosts-parser>
       ## @version   2.0.2
       ##
       ## Setup this Policy for script: [X] Read [X] Write [X] Policy [X] Test

       :local hostScriptUrl "https://stopad.kplus.pro/script/source?format=routeros&version=2.0.2&sources_urls=https%3A%2F%2Fcdn.rawgit.com%2Ftarampampam%2Fstatic%2Fmaster%2Fhosts%2Fblock_shit.txt,http%3A%2F%2Fadaway.org%2Fhosts.txt,http%3A%2F%2Fpgl.yo
yo.org%2Fadservers%2Fserverlist.php%3Fhostformat%3Dhosts%26showintro%3D0%26mimetype%3Dplaintext&excluded_hosts=localhost";
       :local scriptName "stop_ad.script";
       :local backupFileName "before_stopad";
       :local logPrefix "[StopAD]";

       do {
         /tool fetch check-certificate=no mode=https url=$hostScriptUrl dst-path=("./".$scriptName);
         :if ([:len [/file find name=$scriptName]] > 0) do={
           /system backup save name=$backupFileName;
           :delay 1s;
           :if ([:len [/file find name=($backupFileName.".backup")]] > 0) do={
             /ip dns static remove [/ip dns static find comment=ADBlock];
             /import file-name=$scriptName;
             /file remove $scriptName;
             :log info "$logPrefix AD block script imported, backup file (\"$backupFileName.backup\") created";
           } else={
             :log warning "$logPrefix Backup file not created, importing AD block script stopped";
           }
         } else={
           :log warning "$logPrefix AD block script not downloaded, script stopped";
         }
       } on-error={
         :log warning "$logPrefix AD block script download FAILED";
       };
Winand commented 6 years ago

Хотел создать issue, но напишу для начала тут. Попробуйте в этом самом скрипте после /tool fetch ... добавить delay 1 Есть такая странная особенность, что fetch уже выполнился, а файл в системе ещё не появился. И тогда /file find его не может найти.

homocomputeris commented 6 years ago

@Winand , спасибо за совет, но так тоже не работает:

:local hostScriptUrl "https://stopad.cgood.ru/script/source?format=routeros&version=2.0.2&sources_urls=http%3A%2F%2Fsbc.io%2Fhosts%2Falternates%2Ffakenews-gambling-porn%2Fhosts&excluded_hosts=localhost";
:local scriptName "stop_ad.script";
:local backupFileName "before_stopad";
:local logPrefix "[StopAD]";

do {
  /tool fetch check-certificate=no mode=https url=$hostScriptUrl dst-path=("./".$scriptName);
  :delay 30s;
  :if ([:len [/file find name=$scriptName]] > 0) do={
    /system backup save name=$backupFileName;
    :delay 1s;
    :if ([:len [/file find name=($backupFileName.".backup")]] > 0) do={
      /ip dns static remove [/ip dns static find comment=ADBlock];
      /import file-name=$scriptName;
      /file remove $scriptName;
      :log info "$logPrefix AD block script imported, backup file (\"$backupFileName.backup\") created";
    } else={
      :log warning "$logPrefix Backup file not created, importing AD block script stopped";
    }
  } else={
    :log warning "$logPrefix AD block script not downloaded, script stopped";
  }
} on-error={
  :log warning "$logPrefix AD block script download FAILED";
}
Winand commented 6 years ago

если откроете в браузере ссылку, прописанную в скрипте, то увидите, что отдаёт сервер:

## Sources cache state: enabled, *response* cache lifetime: 30
## Error :: http://sbc.io/hosts/alternates/fakenews-gambling-porn/hosts :: The file is too big (detected by header "Content-Length")
## Script generated 2018-08-07 16:42:36
## Script format: "routeros"
## 
## Hosts list sources:
## > http://sbc.io/hosts/alternates/fakenews-gambling-porn/hosts
## 
## Excluded hosts:
## > localhost

Попробуйте всё же в первом скрипте поставить задержку после fetch. Только 30 секунд - это как-то перебор имхо.)

Даже можно сделать чуть правильнее с поллингом

# if a file is just created it is not accessible immediately
while ([len [/file find name=("./".$scriptName)]] = 0) do={delay 0.1}