Сценарий AWS CodeDeploy Powershell не выполняется

У меня есть приложение, которое я развертываю с помощью AWS Codedeploy в экземпляре EC2 под управлением Windows Server 2012 R2 с установленным развертыванием кода. Codedeploy устанавливается на экземпляр с использованием рекомендованного шаблона CloudFormation и до сих пор работает нормально.

Я создал простой сценарий, который должен создать папку в файловой системе и виртуальный каталог в IIS на веб-сайте по умолчанию. , сценарий приведен ниже:

# Are you running in 32-bit mode?
#   (\SysWOW64\ = 32-bit mode)

if ($PSHOME -like "*SysWOW64*")
{
  Write-Warning "Restarting this script under 64-bit Windows PowerShell."

  # Restart this script under 64-bit Windows PowerShell.
  #   (\SysNative\ redirects to \System32\ for 64-bit mode)

  & (Join-Path ($PSHOME -replace "SysWOW64", "SysNative") powershell.exe) -File `
    (Join-Path $PSScriptRoot $MyInvocation.MyCommand) @args

  # Exit 32-bit script.

  Exit $LastExitCode
}

# Was restart successful?
Write-Warning "Hello from $PSHOME"
Write-Warning "  (\SysWOW64\ = 32-bit mode, \System32\ = 64-bit mode)"
Write-Warning "Original arguments (if any): $args"

# Your 64-bit script code follows here...

# Install IIS Web Server administrator
Import-Module -Name ServerManager
Import-Module WebAdministration
Install-WindowsFeature Web-Server

$folderLoc = 'C:\inetpub\imageprocessorcache'

if (-not (Test-Path $folderLoc))
{
    # Create new folder
    New-Item $folderLoc -type directory

    # Get rule and add new rule to it
    $existingAcl = Get-Acl $folderLoc
    $permissions = 'Users', 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow'
    $rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permissions
    $existingAcl.AddAccessRule($rule)

    # Apply new rule to the folder
    $existingAcl | Set-Acl -Path $folderLoc

    # Get the ACL for the folder for output purposes
    Get-Acl -Path $folderLoc
}

$virtualPathLocation = 'IIS:\Sites\Default Web Site\imageprocessorcache'

# Check if the virtual directory exists in IIS
if (-not (Test-Path $virtualPathLocation))
{
    # Create it because it doesn't exist yet
    New-WebVirtualDirectory -Name 'imageprocessorcache' -PhysicalPath $folderLoc -Site 'Default Web Site'
}

Вот файл appspec, который у меня есть:

version: 0.0
os: windows
files:
  - source: MyWebsite
    destination: c:\temp\CodeDeployFiles
hooks:
  BeforeInstall:
    - location: \Deployment Scripts\IISCreateImageProcessorVirtualDirectory.ps1
      timeout: 900

По какой-то причине сценарий не выполняется как часть процесса развертывания, кажется, что он пропускается или просто не работает.

Я могу подключиться к удаленному рабочему столу, перейти во временную папку на экземпляре EC2 (куда файлы копируются во время развертывания с помощью CodeDeploy) и щелкнуть правой кнопкой мыши по IISCreateImageProcessorVirtualDirectory.ps1 и выберите «Запускать с помощью Powershell» на скопированном скрипте. Это работает нормально, папка и виртуальный каталог созданы.

Я успешно запускал сценарии .ps1 в прошлом, используя развертывание кода с моей текущей настройкой, но этот не работает или оставьте все сообщения об ошибках.

Что может быть причиной того, что скрипт не запускается?

Спасибо за вашу помощь. ************************** 1. строка ******************** ******* trx_id: 41844623 trx_state: RUNNING ...

select * from INFORMATION_SCHEMA.INNODB_TRX\G;
*************************** 1. row ***************************
                    trx_id: 41844623
                 trx_state: RUNNING
               trx_started: 2016-11-23 15:40:42
     trx_requested_lock_id: NULL
          trx_wait_started: NULL
                trx_weight: 71
       trx_mysql_thread_id: 0
                 trx_query: NULL
       trx_operation_state: NULL
         trx_tables_in_use: 0
         trx_tables_locked: 6
          trx_lock_structs: 7
     trx_lock_memory_bytes: 1136
           trx_rows_locked: 1
         trx_rows_modified: 64
   trx_concurrency_tickets: 0
       trx_isolation_level: REPEATABLE READ
         trx_unique_checks: 1
    trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
 trx_adaptive_hash_timeout: 10000
          trx_is_read_only: 0
trx_autocommit_non_locking: 0

Есть ли способ убить транзакцию MySQL с помощью ее trx_id? Или как-нибудь его очистить? С этой транзакцией не связан идентификатор потока MySQL или идентификатор запроса, и он сохраняется после перезапуска сервера.

0
задан 24 November 2016 в 02:23
2 ответа

Это распределенная транзакция. Он ждет фиксации или отката.

http://dev.mysql.com/doc/refman/5.7/en/xa-statements.html

Чтобы просмотреть ожидающие распределенные транзакции, войдите в командную строку MySQL и введите:

XA RECOVER;

Чтобы откатить транзакцию, возьмите данные, найденные в столбце данных, из выходных данных XA Recover. Итак, если в столбце данных указано «X12345»:

XA ROLLBACK «X12345»

0
ответ дан 5 December 2019 в 09:09

Попробуйте это исправление. Используйте:

mysql> xa recover convert xid;

затем зафиксируйте их, используя:

mysql> xa commit 0x01020304627175616C;
0
ответ дан 5 December 2019 в 09:09

Теги

Похожие вопросы