Автор Тема: Mmonit - стартиране на shell script  (Прочетена 3722 пъти)

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Здравейте,

как да настроя M/monit да стартира и да наглежда даден процес, стартиран от shell script.
Скриптът се намира да речем в /home/user/program/start.sh.

И също как да направя ако процесът превишава зададен CPU usage, то да бъде убит.

Благодаря предварително.
Активен

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Re: Mmonit - стартиране на shell script
« Отговор #1 -: Aug 10, 2015, 13:00 »
В документацията всичко е описано много подробно, една камара примери има също...

https://mmonit.com/wiki/Monit/ConfigurationExamples
Активен

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Mmonit - стартиране на shell script
« Отговор #2 -: Aug 10, 2015, 13:19 »
Дам, има много примери за обичайните програми, но аз търся конкретно за моя случай.

Пробвах нещо подобно, но ми дава /etc/monit/monitrc:280: Error: syntax error 'start program = "'

check process gameserver
   start program = "/bin/sh /home/user/start.sh"
   if cpu > 80% for 2 cycles then alert
   if cpu > 95% for 3 cycles then restart

Също така не знам как да напиша и stop program = " " , за да е вярно.
Активен

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Re: Mmonit - стартиране на shell script
« Отговор #3 -: Aug 10, 2015, 14:56 »
Код:
check process gameserver with pidfile gameserver_pid_file
  start program = "/bin/bash path_to_start_script"
  stop program  = "/bin/bash path_to_stop_script"
  if cpu usage > 1% for 5 cycles then restart
  if 5 restarts within 100 cycles then restart

Монит наблюдава процесите чрез PID. Това значи, че трябва да кажеш на монит къде да намери PID-а на твоя процес. След това трябва да имаш изпълними стартиращ и спиращ скриптове с права за изпълнение от монит демона за твоя "геймсървър". Това е всичко.
Активен

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Mmonit - стартиране на shell script
« Отговор #4 -: Aug 10, 2015, 15:11 »
Добре, но тъй като нито един геймсървър няма зададен PID по подразбиране, как ще стане? Как мога да задам PID на даден процес?
Доколкото четах някъде, пишеше, че монит може да следи процес, без да го стартира, което не знам дали може да помогне с НЕизползването на PID.
Мисля, че важно да добавя е, че геймсървърите се пускат от root.

Също така можеш ли да дадеш пример за спиращ скрипт, тъй като досега съм спирал процесите винаги от Htop или от конзолата на самия геймсървър.

1) if cpu usage > 1% for 5 cycles then restart
2) if 5 restarts within 100 cycles then restart

1) това не означава ли, че ако cpu usage е по-голям от 1% за 5 цикъла ще се рестартира, тоест винаги ще се рестартира на 5 цикъла?
2) ако има 5 рестарта за 100 цикъла - пак рестарт ?


Благодаря ти предварително.
Активен

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Re: Mmonit - стартиране на shell script
« Отговор #5 -: Aug 10, 2015, 15:36 »
Всеки процес в линукс света си има PID (process ID). Трябва да си разровиш документацията на геймсървъра и да видиш как да го накараш да си пише ID-то в някой файл. За спиращ скрипт трябва да си напишеш нещо, което убива процеса - за целта ти трябва същият този PID. За останалото си го разбрал точно. Нагласи си процентите като за твоите нужди. Имай предвид, че монит рестартира процеса няколко пъти и ако все пак продължава да има високо цпу (прегледай документацията за колко цикъла идеше реч, че ме мързи) спира да права каквото и да било и го дава в статус alert. Затова е второто правило.
Активен

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Mmonit - стартиране на shell script
« Отговор #6 -: Aug 13, 2015, 15:17 »
Успях да накарам въпросният геймсървър да си пише PID-a във файл. Бях се заблудил, че трябва аз да му го дефинирам в този файл и всеки път, сървърът ще използва един и същи PID. Но явно той си го пише и Monit си го взема от този файл. Дотук добре, Monit го изкарва running, сега само остава да оправя script-a за старт/стоп :)
Активен

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Mmonit - стартиране на shell script
« Отговор #7 -: Aug 14, 2015, 13:07 »
В момента имам 2 скрипта - един за пускане и един за спиране на процеса.

И двата скрипта изпълнени в терминала работят нормално.

/bin/sh /home/dido/user/stop.sh
/bin/sh /home/dido/user/start.sh

В Монит имам следното:

Код
GeSHi (Bash):
  1. Process Name          = gameserver
  2. Pid file             = /home/dido/user/pid.pid
  3. Monitoring mode      = active
  4. Start program        = '/bin/sh /home/dido/user/start.sh' timeout 3 second(s)
  5. Stop program         = '/bin/sh /home/dido/user/stop.sh' timeout 3 second(s)
  6. Existence            = if does not exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
  7. Pid                  = if changed 1 times within 1 cycle(s) then alert
  8. Ppid                 = if changed 1 times within 1 cycle(s) then alert
  9. CPU usage limit      = if greater than 50.0% 2 times within 2 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
  10. System Name           = system_debian
  11. Monitoring mode      = active

Когато геймсървърът е стартиран ръчно, тоест съм изпълнил командата /bin/sh /home/dido/user/start.sh в терминала, Монит вижда сървъра Running, тоест до тук добре. Когато натисна Stop Service (от Монит), процесът се спира коректно. НО, когато се опитам да го стартирам през Монит (Start Service), процесът не може да се стартира.

В лога изписва следното:

Код:
[EEST Aug 14 12:32:15] info     : 'gameserver' start on user request
[EEST Aug 14 12:32:15] info     : monit daemon at 25821 awakened
[EEST Aug 14 12:32:15] info     : Awakened by User defined signal 1
[EEST Aug 14 12:32:15] info     : 'gameserver' start: /bin/sh
[EEST Aug 14 12:32:18] error    : 'gameserver' failed to start
[EEST Aug 14 12:32:18] info     : 'gameserver' start action done

Когато го спра през Монит (Service Stop), всичко си е точно.

Код:
[EEST Aug 14 12:53:14] info     : 'gameserver' stop on user request
[EEST Aug 14 12:53:14] info     : monit daemon at 25821 awakened
[EEST Aug 14 12:53:14] info     : Awakened by User defined signal 1
[EEST Aug 14 12:53:14] info     : 'gameserver' stop: /bin/sh
[EEST Aug 14 12:53:14] info     : 'gameserver' stop action done
Активен

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Re: Mmonit - стартиране на shell script
« Отговор #8 -: Aug 14, 2015, 15:03 »
Дай изхода от ls -la /home/dido/user/
Активен

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Mmonit - стартиране на shell script
« Отговор #9 -: Aug 14, 2015, 15:19 »
root@debian:~# ls -la /home/dido/user
total 34640
drwxrwxrwx  5 root root      4096 Aug 14 13:17 .
drwxrwxrwx 23 dido user2     4096 Aug 13 16:17 ..
-rwxrwxrwx  1 root root      4767 Aug 14 13:30 CONSOLE.log
-rwxrwxrwx  1 root root    954176 Jul 24 16:44 core.so
-rwxrwxrwx  1 root root    658817 Jul 24 16:44 crashhandler.so
drwxrwxrwx 15 root root      4096 Jul 24 16:44 cstrike
-rwxrwxrwx  1 root root     28755 Aug 14 13:17 debug.log
-rwxrwxrwx  1 root root    303632 Jul 24 16:44 demoplayer.so
-rwxrwxrwx  1 root root      7340 Jul 24 16:44 dproto.cfg
-rwxrwxrwx  1 root root   2949240 Jul 24 16:44 engine_i486.so
-rwxrwxrwx  1 root root    393734 Jul 24 16:44 filesystem_stdio.so
-rwxrwxrwx  1 root root    107274 Jul 24 16:44 hlds_linux
-rwxrwxrwx  1 root root      7778 Jul 24 16:44 hlds_run
-rwxrwxrwx  1 root root    171230 Jul 24 16:44 hltv
-rwxrwxrwx  1 root root    322152 Jul 24 16:44 libgcc_s.so.1
-rwxrwxrwx  1 root root        17 Jul 24 16:44 libSDL2.so
-rwxrwxrwx  1 root root   3769939 Jul 24 16:44 libstdc++.so.6
-rwxrwxrwx  1 root root     76032 Jul 24 16:44 libsteam_api.so
-rwxrwxrwx  1 root root   4383138 Jul 24 16:44 libsteam.so
-rwxrwxrwx  1 root root    474299 Jul 24 16:44 libtier0.so
-rwxrwxrwx  1 root root    441049 Jul 24 16:44 libvstdlib.so
-rw-r--r--  1 root root         6 Aug 13 14:50 pid
-rwxrwxrwx  1 dido user2        5 Aug 14 13:29 pid.pid
-rwxrwxrwx  1 root root    948577 Jul 24 16:44 proxy.so
-rw-rw-rw-  1 dido user2      218 Aug 14 13:16 start2.sh
-rwxrwxrwx  1 dido root       219 Aug 13 15:03 start.bat
-rwxrwxrwx  1 dido user2      248 Aug 14 13:14 start.sh
-rwxrwxrwx  1 root root         3 Aug 14 13:29 steam_appid.txt
drwxrwxrwx  4 root root      4096 Jul 24 16:44 steamapps
-rwxrwxrwx  1 root root  16627778 Jul 24 16:44 steamclient.so
-rwxrwxrwx  1 dido user2       80 Aug 13 18:38 stop.sh
drwxrwxrwx 16 root root      4096 Jul 24 16:44 valve
-rwxrwxrwx  1 root root    900425 Jul 24 16:44 vgui2.so
-rwxrwxrwx  1 root root    975981 Jul 24 16:44 vgui.so
-rwxrwxrwx  1 root root     54955 Jul 24 16:44 voice_miles.so
-rwxrwxrwx  1 root root    664256 Jul 24 16:44 voice_silk.so
-rwxrwxrwx  1 root root    135312 Jul 24 16:44 voice_speex.so
Активен

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Re: Mmonit - стартиране на shell script
« Отговор #10 -: Aug 14, 2015, 20:42 »
Я ги дай тея старт/стоп скриптове да се види какво има вътре...
Активен

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Mmonit - стартиране на shell script
« Отговор #11 -: Aug 15, 2015, 01:17 »
start.sh

Код
GeSHi (Bash):
  1. #! /bin/sh
  2. /home/dido/user/hlds_run -game cstrike +ip IP -port PORT --pidfile /home/dido/user/pid.pid  > CONSOLE.log 2>&1 &

Oт /hlds_run нататък са опции за стариране на геймсървъра.

stop.sh
Код
GeSHi (Bash):
  1. #! /bin/sh
  2. kill $(ps aux | grep '+ip IP -port PORT' | awk '{print $2}')
« Последна редакция: Aug 15, 2015, 01:18 от globaluty »
Активен

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Re: Mmonit - стартиране на shell script
« Отговор #12 -: Aug 15, 2015, 06:12 »
Всичко изглежда нормално. Вдигни timeout на старт скрипта на 60sec.
Активен

globaluty

  • Напреднали
  • *****
  • Публикации: 96
    • Профил
Re: Mmonit - стартиране на shell script
« Отговор #13 -: Aug 15, 2015, 11:53 »
Пак същото. Попринцип сървърът се стартира за максимум 5 секунди.


EDIT: Забелязах нещо много интересно. Подобно на service-a от другата тема, когато отворя нов терминал и се опитам да execute-на start.sh (/bin/sh /home/dido/user/start.sh), сървърът не се стартира. Излиза само този ред.

http://prikachi.com/images.php?images/147/8300147A.png

Чак когато го стартирам, както съм го стартирал досега, отивам в /home/dido/user/ и пиша ./start.sh, чак след това скрипта за старт ще проработи в същия терминал. Стоп скриптът винаги си работи. Чак след това се появява и този ред, което всъщност е самият гейм сървър.

http://prikachi.com/images.php?images/158/8300158t.png
« Последна редакция: Aug 15, 2015, 12:48 от globaluty »
Активен

BRADATA

  • Напреднали
  • *****
  • Публикации: 833
  • Distribution: Slackware/Mint/CentOS
  • Window Manager: console/KDE/LXDE
    • Профил
    • WWW
Re: Mmonit - стартиране на shell script
« Отговор #14 -: Aug 15, 2015, 20:08 »
Копирай скриптовете в /usr/local/sbin и пробвай пак.
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
rc.d shell script
Настройка на програми
VlasA 3 5649 Последна публикация Aug 29, 2004, 12:05
от VlasA
Shell-script- за минаване от един юзър в друг
Настройка на програми
Nik123 5 6211 Последна публикация Jul 03, 2006, 20:22
от Nik123
shell script с параметри
Общ форум
k0tka 1 5406 Последна публикация May 25, 2012, 20:23
от k0tka
shell script
Общ форум
villimon 29 15978 Последна публикация Nov 01, 2013, 21:43
от neter
ПРЕМЕСТЕНО: shell script
Общ форум
neter 0 2803 Последна публикация Oct 18, 2013, 22:59
от neter