Advertisement
Inquisitor

Loader.cmd

Nov 18th, 2016
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 3.06 KB | None | 0 0
  1. @Echo Off
  2. :: Portable nginx+php5+mysql for Windows
  3. :: Inquisitor, 2016
  4.  
  5. :: nginx    1.11.6
  6. :: php      5.6.28
  7. :: mysql    5.5.36
  8.  
  9. CD /D "%~dp0"
  10.  
  11. :: Лог работы скрипта
  12. Set LogFile=.\%~n0.log
  13. :: Формат даты в логе
  14. Set TimestampFormat=[%%Date%% %%Time:~,8%%]
  15. :: Периодичность проверки запроса на отключение и перезапуска процессов при падении, секунды
  16. Set WatcherTimeout=10
  17.  
  18. :: Перезапускаем себя как скрытый процесс
  19. If "%~1"=="" (
  20.     Start "" "%~dp0tools\hidcon" %~nx0 restart_hidden
  21.     Call Echo.>>"%LogFile%"
  22.     Call :Log Loader started
  23.     Exit
  24. )
  25.  
  26. :: Добавляем пути к бинарникам в системный path для этого скрипта и дочерних процессов
  27. Set Path=%!!%~dp0nginx;%!!%~dp0mysql\bin;%Path%
  28. :: Добавляем модули
  29. ::  ImageMagick 6.9.3-3
  30. Set Path=%Path%;%~dp0modules\imagick6
  31. ::  ImageMagick 7.0.5.10
  32. Set Path=%Path%;%~dp0modules\imagick7
  33. ::  FFMpeg 3.3.1
  34. Set Path=%Path%;%~dp0modules\ffmpeg
  35. :: Меняем системный temp на наш
  36. Set Temp=%~dp0\tmp
  37.  
  38.  
  39. :: Запускаем каждый процесс из его рабочей директории
  40.  
  41. :: MySQL
  42. Call :Log Starting MySQL...
  43. :start-mysql
  44. PushD .\mysql\bin
  45. Start mysqld --defaults-file=my.ini --standalone
  46. PopD
  47. If "%1"=="restart" (
  48.     Call :Log MySQL crashed, restarting
  49.     Exit /B
  50. )
  51.  
  52. :: PHP
  53. Call :Log Starting PHP-FPM...
  54. :start-php
  55. PushD .\php-fpm
  56. Start hidcon php-cgi -b 127.0.0.1:9123 -c ".\php.ini"
  57. PopD
  58. If "%1"=="restart" (
  59.     Call :Log PHP-FPM crashed, restarting
  60.     Exit /B
  61. )
  62.  
  63. :: nginx
  64. Call :Log Starting NginX...
  65. :start-nginx
  66. PushD .\nginx
  67. Start nginx
  68. PopD
  69. If "%1"=="restart" (
  70.     Call :Log NginX crashed, restarting
  71.     Exit /B
  72. )
  73.  
  74. :: Убиваем уже не нужные процессы hidcon
  75. TaskKill /F /IM "hidcon.exe"
  76.  
  77. :: Повышаем приоритет для запущенных процессов
  78. For %%A In ("mysqld.exe", "php-cgi.exe", "nginx.exe") Do (
  79.     wmic process where name="%%~A" CALL setpriority "high priority"
  80. )
  81.  
  82. :: Создаём lock-файл и следим за его наличием
  83. Set LockFile=.\.%~n0.lock
  84. Echo.>"%LockFile%"
  85. :Watcher
  86. Ping -n %WatcherTimeout% 127.0.0.1>nul 2>nul
  87. :: Проверяем наличие процессов и перезапускаем в случае падения
  88. TaskList /FI "imagename EQ php-cgi.exe" /FO:CSV|FindStr /I /C:"php-cgi.exe">nul||Call :start-php restart
  89. :: Запускаем процесс выключения, если файл удалён
  90. If Not Exist "%LockFile%" (
  91.     Call :Log Lockfile not found, killing child processes
  92.  
  93.     rem Останавливаем nginx
  94.     PushD .\nginx
  95.     nginx -s stop
  96.     PopD
  97.  
  98.     rem Останавливаем MySQL
  99.     mysqladmin -u root shutdown
  100.  
  101.     rem Останавливаем PHP-CGI
  102.     TaskKill /F /T /IM php-cgi.exe
  103.  
  104.     Call :Log Loader stopped
  105.     Exit
  106. )
  107. GoTo :Watcher
  108.  
  109. :Log
  110.     Call Echo %TimestampFormat% %*>>"%LogFile%"
  111. Exit /B
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement