|
Проверка запущенности процедуры | ☑ | ||
---|---|---|---|---|
0
Злобная Печенька
23.10.14
✎
12:09
|
Всем привет. ТОваг'ищи, нужен совет бывалых. Есть процедура на оракл, есть sh в кроне, который каждые 5 минут эту процедуру пинает. СЕйчас колдую над проверкой запущенности процедуры и пока не понимаю, как это реализовать. Что проще реализуемо и лучше по производительности- дописать процедуру, на проверку запущенности самой себя, или дописать sh-ник, чтобы проверял запущенность своей копии?
|
|||
1
Злобная Печенька
23.10.14
✎
12:16
|
Реализовать все это джобом нет возможности, так как в .sh проверяется, запущен ли клиент. и если клиент не запущен, процедура не исполняется.
|
|||
2
kokamoonga
23.10.14
✎
14:19
|
(0) а не судьба какой-нибудь флаг передергивать при запуске/завершении? Писать его куда угодно, хоть просто в файл
|
|||
3
Looser-1c
23.10.14
✎
14:20
|
(2) Файл плохо...
(0) Лучше в процедуре это делай. |
|||
4
kokamoonga
23.10.14
✎
14:22
|
(3) >>> Файл плохо...
Тут наверно и какие-то аргументы будут? |
|||
5
France
23.10.14
✎
14:22
|
семафор... при первом входе в истину.
|
|||
6
Kalambur
23.10.14
✎
14:22
|
(0)+(1) ну тут же все очевидно что нужно "дописать sh-ник"
|
|||
7
Looser-1c
23.10.14
✎
14:24
|
(4) Ага. Скрипт в корку вылетит, а файл останется
|
|||
8
kokamoonga
23.10.14
✎
14:28
|
(7) И как предполагается внешний контроль в сочетании с "Лучше в процедуре это делай."?
|
|||
9
Looser-1c
23.10.14
✎
14:30
|
(8) я делал так - накладывал hold lock на служебную таблицу в начале работы и снимал его в конце.
Преимущество - лок сам снимается при авосте. |
|||
10
kokamoonga
23.10.14
✎
14:35
|
(9) Блокировка в качестве флага?.. Свежо.
Жаль что изобретатели .pid-файлов до такого не додумались |
|||
11
Злобная Печенька
23.10.14
✎
16:27
|
(2) А поподробнее можно? )))
|
|||
12
kokamoonga
24.10.14
✎
03:02
|
(11) Каких подробностей ты желаешь?
При запуске ставить флаг, при завершении снимать его. При этом абсолютно неважно куда он будет записан: в файл, в таблицу, в переменную окружения и так далее. Как верно заметил коллега в (7) может случиться ситуация, что процесс упадет, получит SIGKILL или еще что, а флаг останется взведенным. Поэтому логично писать куда-то идентификатор процесса, а при запуске сверять. Собственно я ничего нового не изобретаю сейчас. В упрощенном виде так работает почти любой демон с pid-файлами. 1. При запуске проверяется существование файла somedaemon.pid по определенному пути. 2. Если файл не существует запускается процесс и создается файл с записью в него pid процесса. 3. Если файл существует, производится поиск процесса по pid и валидация. Например, у меня сейчас в /var/run/nginx/ лежит файл nginx.pid с содержанием 1439 ~$ ps ax | grep 1439 1439 ? Ss 0:00 nginx: master process /usr/sbin/nginx Я хочу убедиться, что это именно nginx: ~$ ps -A | grep 1439 | awk '{print$4}' nginx Если я сейчас попробую сказать # service nginx start, то ничего не произойдет. Соответственно, если процесс существует и проходит валидацию, то скрипт не запускается. В противном случае см. пункт 2. При это не обязательно это должен быть pid процесса и не обязательно запись в файл. Любой удобный способ хранить любой удобный идентификатор процесса. |
|||
13
vicof
24.10.14
✎
07:18
|
Ваша процедура очень запущенная, мадемуазель))
|
|||
14
Woldemar22LR
24.10.14
✎
07:47
|
(7) было такое - бегал с нетбуком цеплялся по SSH и звонил разработчикам какой файл удалить :) Разработчики предложили доработать программу за скромный полтинник.
|
|||
15
DrZombi
гуру
24.10.14
✎
09:05
|
(0) Пиши, какой либо признак запущенности в какую либо табличку... Или файл (на худой конец) :)
Момент выхода из процедуры, очищай признак... или Удаляй файл. .. Можешь еще сделать счетчик, который будет меняться с интервалом... А лучше время :) Что бы понять, что процедурка не подвисло :) |
|||
16
Злобная Печенька
24.10.14
✎
15:07
|
(12) Спасибо за подробный ответ. Буду пытаться))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |