none
Отслеживание зависшего процесса Powershell RRS feed

  • Вопрос

  • Привет, всем, просьба помочь, делаю бэкапы 1С скриптом, все бы ничего, все работает , но иногда спонтанно  1 раз в месяц или 1 раз в пол года по какой то причине, он не завершает процесс 1 из баз и пишет вот допустим такую строку и бэкап получается неполным:

    C:\1C_Bases\Buh1\1Cv8.1CD : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

    Поясню, бэкап делается в 2 часа ночи, никто занять процесс не мог. 


    Никто не знает в чем может быть причина? Или как это отловить?





    • Изменено Revalio 9 июля 2019 г. 13:54
    9 июля 2019 г. 13:49

Ответы

  • я не знаю как отлавливать зависший, процесс, а зависший процесс выглядит вот так

    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /F"C:\1C_Bases\Buh_Kvadra\"  /AppAutoCheckMode /AppAutoCheckVersion 

    Buh_Kvadra не попадает под фильтр так как между Buh и Kvadra нет пробела

    правильный фильтр будет выглядеть так 

    "!?(ЗУП|БУХ|BUH|ZUP)[ _](Квадра|КПБС|КПБС-СОФТ|Крикунов и Партнеры|Рогожский Вал|Элбиус|Спутник|Elbius|KPBS|KPBS_SOFT|Krikunov|Kvadra|Rogozhskij_Val|Sputnik)" 

    конструкция [ _] означает что допускается один из перечисленных вариантов - или пробел или подчеркивание

    ПС Скрипт правил я, а спрашивал о нем другой участник


    The opinion expressed by me is not an official position of Microsoft

    • Изменено Vector BCOModerator 11 июля 2019 г. 14:04
    • Помечено в качестве ответа Revalio 11 июля 2019 г. 14:52
    11 июля 2019 г. 14:03
    Модератор

Все ответы

  • вы воюете с этой проблемой довольно продолжительное время

    не думали попробовать делать бекапы родными механизмами 1с?

    где вы получаете упомянутую ошибку? как решаете ее руками?


    The opinion expressed by me is not an official position of Microsoft

    9 июля 2019 г. 14:12
    Модератор
  • ошибка в логе, с тех пор не было никаких проблем, все шло отлично, я только недавно заметил что бэкапы порой неполные
    9 июля 2019 г. 14:18
  • родными механизмами 1с, делать никто не хочет, это я не моя привилегия)) 
    9 июля 2019 г. 14:20
  • если 1 база не сделалась, я с утра делаю в ручную бэкап, этим же скриптом кстати и он убивает процесс, только почему он ночью этого не делает, вот это загадка.
    9 июля 2019 г. 14:34
  • есть вариант парсить лог на предмет ошибок и хотя бы отправлять вам меил о том что бекап не полный, и как вариант включать 1 разовую задачу через несколько часов после первой для автоматического повторения в случае фейла.

    The opinion expressed by me is not an official position of Microsoft

    9 июля 2019 г. 16:34
    Модератор
  • А вы не пробовали использовать MSSQL ну или бесплатный Postgre?

    Говорят, там без проблем можно делать бекапы ;)

    9 июля 2019 г. 19:24
  • C:\1C_Bases\Buh1\1Cv8.1CD : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

    Поясню, бэкап делается в 2 часа ночи, никто занять процесс не мог.

    Здравствуйте,

    Уточните пожалуйста, какой у Вас антивирусный продукт используется, он случайно в это время не проводит антивирусную проверку? Пробовали проверять какой процесс держит этот файл на момент проблемы?

    Avis de non-responsabilité:
    Mon opinion ne peut pas coïncider avec la position officielle de Microsoft.

    Bien cordialement, Andrei ...

    MCP

    10 июля 2019 г. 0:28
    Модератор
  • так и так пишется лог, только пишет он вот эти ошибки, а как отследить что бэкап не полный, придется писать и измерять его размер или как? или отлавливать когда он ошибки получил? 
    10 июля 2019 г. 6:56
  • у меня работает 2, 5 пользователя, зачем там какая то БД))
    10 июля 2019 г. 6:56
  • ничего вообще не стартует в 2 часа ночи.
    10 июля 2019 г. 6:59
  • у меня работает 2, 5 пользователя, зачем там какая то БД))

    Например для того чтобы иметь возможность гибкого управления базой, создавать бекапы, делать плановые обработки в базе (задачи) и тд., но это отступлене от темы

    так и так пишется лог, только пишет он вот эти ошибки, а как отследить что бэкап не полный, придется писать и измерять его размер или как? или отлавливать когда он ошибки получил? 
    По нормальному ошибки отлавливаются в момент получения ошибки, но их же можно искать и в логе. Вконце скрипта вы можете добавить парсер лога и проверять есть ли в логе свежие ошибки - если есть предпринимать меры (слать меил, пробовать еще раз и тд.)


    The opinion expressed by me is not an official position of Microsoft


    10 июля 2019 г. 8:27
    Модератор
  • Пример есть?  это 1 строчкой парсится, или придется добавлять еще функцию? 

    10 июля 2019 г. 8:41
  • Пишется что то вроде этого ?  Get-Content -Path C:\1C_Bases\.Infrastrucutre\Utilities\ArchiveBase.log
    10 июля 2019 г. 8:47
  • или даже так, думаю так лучше

    Select-String -Path C:\1C_Bases\.Infrastrucutre\Utilities\ArchiveBase.log -Pattern 'error','warning'
    10 июля 2019 г. 8:52
  • Пишется что то вроде этого ?  Get-Content -Path C:\1C_Bases\.Infrastrucutre\Utilities\ArchiveBase.log

    Да. Для того чтобы прочтать лог Get-Content

    Лог каждый раз создается новый или каждый раз дозаписывается?

    Если новый то

    $SearchResult = Get-Content -Path C:\1C_Bases\.Infrastrucutre\Utilities\ArchiveBase.log | Select-String -pattern 'Процесс не может получить доступ к файлу'

    If (($SearchResult| Measure-Object).Count -ge 1){
    # Вы нашли ошибку и можете что-то предпринять
    }



    The opinion expressed by me is not an official position of Microsoft

    10 июля 2019 г. 8:55
    Модератор
  • понял, нашли ошибку и отправили мне на мыло сообщение, что вот она
    10 июля 2019 г. 8:59
  • лог каждый раз дозаписывается 
    10 июля 2019 г. 9:01
  • А как быть с дозаписываемым логом, там другая логика?  
    10 июля 2019 г. 9:05
  • лог каждый раз дозаписывается 
    покажите фрагмент лога за несколько дней (если файлов много можно вырезать куски из середины оставивив только начало/конец дня + пару записей)

    The opinion expressed by me is not an official position of Microsoft

    10 июля 2019 г. 9:05
    Модератор
  • [2019-07-09 16:13:32Z] Termination : 
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"1С БУХ Обучение (Галина О)" /AppAutoCheckVersion  /AppAutoCheckMode
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"!БУХ Обучение" /AppAutoCheckVersion  /AppAutoCheckMode
    [2019-07-09 16:14:18Z] Termination : 
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"1С БУХ Обучение (Галина О)" /AppAutoCheckVersion  /AppAutoCheckMode
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"!БУХ Обучение" /AppAutoCheckVersion  /AppAutoCheckMode
    [2019-07-09 16:15:03Z] Termination : 

    7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

    Scanning the drive:
    0 files, 0 bytes

    Creating archive: D:\1C_Archive\20190709(1).zip

    Items to compress: 0


    Files read from disk: 0
    Archive size: 22 bytes (1 KiB)
    Everything is Ok
    [2019-07-09 16:17:24Z] Termination : 
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8.exe" DESIGNER /IBName"!БУХ Обучение" /AppAutoCheckVersion  /AppAutoCheckMode
    [2019-07-09 16:17:34Z] Termination : 

    7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

    Scanning the drive:
    0 files, 0 bytes

    Creating archive: D:\1C_Archive\20190709(1).zip

    Items to compress: 0


    Files read from disk: 0
    Archive size: 22 bytes (1 KiB)
    Everything is Ok
    [2019-07-09 16:20:02Z] Termination : 
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"!БУХ Обучение" /AppAutoCheckVersion  /AppAutoCheckMode
    [2019-07-09 16:20:12Z] Termination : 

    7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

    Scanning the drive:
    21 folders, 413 files, 22463330941 bytes (21 GiB)

    Creating archive: D:\1C_Archive\20190709(1).zip

    Items to compress: 434


    Files read from disk: 413
    Archive size: 3809746438 bytes (3634 MiB)
    Everything is Ok
    [2019-07-09 16:55:45Z] Termination : 

    7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

    Scanning the drive:
    21 folders, 413 files, 22463281789 bytes (21 GiB)

    Creating archive: D:\1C_Archive\20190709(1).zip

    Items to compress: 434

    [2019-07-09 16:56:18Z] Termination : 
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"!БУХ Обучение" /AppAutoCheckVersion  /AppAutoCheckMode
    [2019-07-09 16:56:28Z] Termination : 

    7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

    Scanning the drive:
    21 folders, 413 files, 22463339298 bytes (21 GiB)

    Creating archive: D:\1C_Archive\20190709(1).zip

    Items to compress: 434


    Files read from disk: 413
    Archive size: 3809746848 bytes (3634 MiB)
    Everything is Ok
    [2019-07-10 02:00:02Z] Termination : 
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"БУХ КПБС" /AppAutoCheckVersion  /AppAutoCheckMode
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"БУХ Элбиус" /AppAutoCheckVersion  /AppAutoCheckMode
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"БУХ Крикунов и Партнеры" /AppAutoCheckVersion  /AppAutoCheckMode
    [2019-07-10 02:00:12Z] Termination : 

    7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

    Scanning the drive:
    75 folders, 1026 files, 69170453423 bytes (65 GiB)

    Creating archive: D:\1C_Archive\20190710.zip

    Items to compress: 1101


    Files read from disk: 1026
    Archive size: 13874698142 bytes (13 GiB)
    Everything is Ok
    10 июля 2019 г. 9:09
  • [2019-07-08 02:00:02Z] Termination : 
    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /IBName"БУХ Спутник" /AppAutoCheckVersion  /AppAutoCheckMode
    [2019-07-08 02:00:32Z] Termination : 

    7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

    Scanning the drive:
    75 folders, 1071 files, 68331246803 bytes (64 GiB)

    Creating archive: D:\1C_Archive\20190708.zip

    Items to compress: 1146


    Files read from disk: 1071
    Archive size: 12746991387 bytes (12 GiB)

    WARNINGS for files:

    C:\1C_Bases\Buh_Sputnik\1Cv8.1CD : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8.1CD.cfl : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8.1CL : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8.1CL.cfl : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8FTxt\changes20190708000000.log : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8JobScheduler\exec.lck : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8JobScheduler\exec.lck.cfl : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8Log\1Cv8.lgf : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8Log\20190603000000.lgp : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8tmp.1CD : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8tmp.1CD.cfl : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8tmp.1CL : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    C:\1C_Bases\Buh_Sputnik\1Cv8tmp.1CL.cfl : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
    ----------------
    WARNING: Cannot open 13 files


    Вот тот самый злополучный день





    10 июля 2019 г. 9:10
  • А как при нахождении ошибки убивать процесс? еще и еще пока не убьет
    10 июля 2019 г. 10:49
  • Привет, всем, просьба помочь, делаю бэкапы 1С скриптом, все бы ничего, все работает , но иногда спонтанно  1 раз в месяц или 1 раз в пол года по какой то причине, он не завершает процесс 1 из баз и пишет вот допустим такую строку и бэкап получается неполным:

    C:\1C_Bases\Buh1\1Cv8.1CD : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

    Поясню, бэкап делается в 2 часа ночи, никто занять процесс не мог. 


    Никто не знает в чем может быть причина? Или как это отловить?





    я одно не понял, причем тут powershell? вы им делаете? а как процесс убиваете выложите скрипт

    Идти туда, где не ждут, Атаковать там, где не подготовились.

    10 июля 2019 г. 11:59
  • Кажется я понял в чем ошибка.

    Скажите пожалуйста, а как добавить сюда что бы он допустим вот так искал базу в Командной строке c символом _ нижнего подчеркивания, 1С интересный объект)) 


    $Bases = "!?(ЗУП|БУХ|BUH|ZUP) (Обучение)"

     
    10 июля 2019 г. 15:32
  • у вас почему то ожидания завершения нет нигде, после операции command | Out-Null

    'А как при нахождении ошибки убивать процесс? еще и еще пока не убьет'

    Do {Get-Process "process_1", "process_2", "process_n" | Stop-Process -Force}
    While (Get-Process "process_1", "process_2", "process_n")

    это цикл убить процесс или процессы, первая строка ищет нужный, нашла убила, вторая проверяет выполнилось ли условие, если нашла процесс с таким именем возвращает на первую строку



    Идти туда, где не ждут, Атаковать там, где не подготовились.

    11 июля 2019 г. 2:38
  • Кажется я понял в чем ошибка.

    Скажите пожалуйста, а как добавить сюда что бы он допустим вот так искал базу в Командной строке c символом _ нижнего подчеркивания, 1С интересный объект)) 


    $Bases = "!?(ЗУП|БУХ|BUH|ZUP) (Обучение)"

    покажите пример что должно быть : все возможные варианты

    The opinion expressed by me is not an official position of Microsoft

    11 июля 2019 г. 3:22
    Модератор
  • у вас почему то ожидания завершения нет нигде, после операции command | Out-Null

    'А как при нахождении ошибки убивать процесс? еще и еще пока не убьет'

    Do {Get-Process "process_1", "process_2", "process_n" | Stop-Process -Force}
    While (Get-Process "process_1", "process_2", "process_n")

    это цикл убить процесс или процессы, первая строка ищет нужный, нашла убила, вторая проверяет выполнилось ли условие, если нашла процесс с таким именем возвращает на первую строку


    Идти туда, где не ждут, Атаковать там, где не подготовились.

    есть хороший шанс попасть в бесконечную петлю с такив циклом если хотябы 1 процесс завискет

    The opinion expressed by me is not an official position of Microsoft

    11 июля 2019 г. 4:01
    Модератор
  • "!?(ЗУП|БУХ|BUH_|ZUP_) (Квадра|КПБС|КПБС-СОФТ|Крикунов и Партнеры|Рогожский Вал|Элбиус|Спутник|Elbius|KPBS|KPBS_SOFT|Krikunov|Kvadra|Rogozhskij_Val|Sputnik)" вот так япрописал 
    11 июля 2019 г. 7:12
  • код как я помню вы переписывали

    #Весрия бэкап 1С баз 2.0
    function backup {
        $srcPath = "C:\1C_Bases\Тест\*"
        $dstPath = "D:\1C_Archive\"
        $dstName = "$(Get-Date -Format "yyyyMMdd(1)").zip"
        & "C:\Program Files\7-Zip\7z.exe" a $dstPath$dstName $srcPath -r -x!*Infrastrucutre -x!Тест
    }

    #stop-service W3SVC
    $process_name = "1cv8[sc]?"
    $LogFile = "C:\1C_Bases\.Infrastrucutre\Utilities\ArchiveBase.log"
    $Bases = "!?(ЗУП|БУХ|BUH_|ZUP_) (Обучение)"
    $Retry = 0
    do {
        "[$(Get-date -Format "u")] Termination : " | Tee-Object $LogFile -Append
        $processes = Get-WmiObject Win32_Process | where-object {($_.name -match $process_name) -and ($_.Commandline -match $Bases)} 
        ForEach ($process in $processes) {
            "$($process.Commandline)" | Tee-Object $LogFile -Append
            $process.Terminate()
        }
        If (($processes | Measure-Object).count -ge 1){
            Start-Sleep -s 5
        }
        $Retry++
    } Until ((($processes | Measure-Object).count -eq 0) -or ($Retry -gt 5))

    if (($processes | Measure-Object).count -eq 0){
        backup | Out-File $LogFile -Append -NoClobber  
    } Else {
        "[$(Get-date -Format "u")] Backup was not started because not all 1C processes was stopped" | Tee-Object $LogFile -Append
        "Not stopped processes : " | Tee-Object $LogFile -Append
        ForEach ($process in $processes) {
            "$($process.Commandline)" | Tee-Object $LogFile -Append
        }
    }
    #start-service W3SVC
    11 июля 2019 г. 8:05
  • Какой-то ужас, используйте маханизм VSS для создания Shadow Copy и копирования файлов из нее. Это окончательно решит ваши проблемы с неконсистентым бэкапом и заблокированными файлами. VSS существует с 2003 года, информации по использованию - вагон.
    11 июля 2019 г. 8:40
  • Привет, всем, просьба помочь, делаю бэкапы 1С скриптом, все бы ничего, все работает , но иногда спонтанно  1 раз в месяц или 1 раз в пол года по какой то причине, он не завершает процесс 1 из баз и пишет вот допустим такую строку и бэкап получается неполным:

    C:\1C_Bases\Buh1\1Cv8.1CD : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

    Поясню, бэкап делается в 2 часа ночи, никто занять процесс не мог. 


    Никто не знает в чем может быть причина? Или как это отловить?





    В 2 часа ночи - понятно, а если кто-то с вечера комп не выключил и сессия висит? по описанию очень похоже.

    То, что бэкапит как-то отрубает сессии перед тем как это сделать?

    11 июля 2019 г. 9:08
  • Какой-то ужас, используйте маханизм VSS для создания Shadow Copy и копирования файлов из нее. Это окончательно решит ваши проблемы с неконсистентым бэкапом и заблокированными файлами. VSS существует с 2003 года, информации по использованию - вагон.
    Вот тоже хороший совет, например встроенный бэкап с всс бэкапит, можно только выбранные файлы и папки забирать по расписанию.
    11 июля 2019 г. 9:09
  • код выше, он находит по колонке командной строки и убивает 
    11 июля 2019 г. 9:11
  • я не знаю как отлавливать зависший, процесс, а зависший процесс выглядит вот так

    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /F"C:\1C_Bases\Buh_Kvadra\"  /AppAutoCheckMode /AppAutoCheckVersion 
    11 июля 2019 г. 9:13
  • База пишется латинскими буквами как в корневом каталоге 
    11 июля 2019 г. 9:14
  • я не знаю как отлавливать зависший, процесс, а зависший процесс выглядит вот так

    "C:\Program Files\1cv8\8.3.14.1779\bin\1cv8c.exe" ENTERPRISE /F"C:\1C_Bases\Buh_Kvadra\"  /AppAutoCheckMode /AppAutoCheckVersion 

    Buh_Kvadra не попадает под фильтр так как между Buh и Kvadra нет пробела

    правильный фильтр будет выглядеть так 

    "!?(ЗУП|БУХ|BUH|ZUP)[ _](Квадра|КПБС|КПБС-СОФТ|Крикунов и Партнеры|Рогожский Вал|Элбиус|Спутник|Elbius|KPBS|KPBS_SOFT|Krikunov|Kvadra|Rogozhskij_Val|Sputnik)" 

    конструкция [ _] означает что допускается один из перечисленных вариантов - или пробел или подчеркивание

    ПС Скрипт правил я, а спрашивал о нем другой участник


    The opinion expressed by me is not an official position of Microsoft

    • Изменено Vector BCOModerator 11 июля 2019 г. 14:04
    • Помечено в качестве ответа Revalio 11 июля 2019 г. 14:52
    11 июля 2019 г. 14:03
    Модератор
  • блин вектор,

    стандартная опция шедулера - пристрелить джобу и начинать сначала, чоб ее не юзать.

    но вообще я согласен с вопросом одного из отвечающих, а чой-то данный топик в мелкомягком скриптинге делает?

    12 июля 2019 г. 3:46
  • А можно вопрос, если кто то что то делает в базе ночью в 2 часа ночи, Terminate убьет его процесс?  
    15 июля 2019 г. 7:38
  • А можно вопрос, если кто то что то делает в базе ночью в 2 часа ночи, Terminate убьет его процесс?  
    думаю что да, но что бы быть уверенным наверняка вы можете попробовать произвести симуляцию работы и бекапа какой то базы 

    The opinion expressed by me is not an official position of Microsoft

    15 июля 2019 г. 13:00
    Модератор
  • Да проводил все работает, все убивает но в 2 часа ночи, 1 пользователь повадился там что то запускать, что то получать из вне, информацию из банка, и эту базу не бэкапит.
    15 июля 2019 г. 13:10
  • Да проводил все работает, все убивает но в 2 часа ночи, 1 пользователь повадился там что то запускать, что то получать из вне, информацию из банка, и эту базу не бэкапит.
    Тогда, как рекомендовали участники, стоит посмотреть в сторону VSS и копирования файлов из VSS, или использования софта для бекапов которые уже из коробк используют VSS, такие как DPM, Veeam, Acronis и другие...

    The opinion expressed by me is not an official position of Microsoft

    18 июля 2019 г. 22:15
    Модератор