flock (нужен экзампл)

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
bRUtality
рядовой
Сообщения: 27
Зарегистрирован: 2013-04-04 16:19:32

flock (нужен экзампл)

Непрочитанное сообщение bRUtality » 2013-07-18 11:11:51

Прошу показать примерчик использования утилиты flock через cron для предотвращения повторного запуска целевого скрипта.
ОС - freebsd 8.2.
Мой вариант:

Код: Выделить всё

*/10 * * * * /usr/local/bin/flock -c /path_to_script/myscript.lock /usr/local/bin/python  /path_to_script/myscript.py 1>>/path_to_script/cron_out.log 2>>/path_to_script/cron_err.log

В обычном режиме все это работает: скрипт запускается, отрабатывает, логи пишутся. Но в час пик был запущен второй экземпляр скрипта, а потом третий и так далее...
Вобщем, нужен примерчик, обрабатывающий такую ситуацию: если скрипт не отработал, то не запускать еще один экземпляр.
Заранее спасибо.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alvares
прапорщик
Сообщения: 485
Зарегистрирован: 2008-07-10 12:48:08
Откуда: Воронеж
Контактная информация:

Re: flock (нужен экзампл)

Непрочитанное сообщение Alvares » 2013-07-18 13:24:18

в скрипте pid указывать и проверку делать? Есть примеры демонов, можно по образцу
Бог создал людей сильными и слабыми. Сэмюэл Кольт сделал их равными...

bRUtality
рядовой
Сообщения: 27
Зарегистрирован: 2013-04-04 16:19:32

Re: flock (нужен экзампл)

Непрочитанное сообщение bRUtality » 2013-07-18 13:31:01

Alvares писал(а):в скрипте pid указывать и проверку делать? Есть примеры демонов, можно по образцу
Склоняюсь к тому, чтобы сделать свой flock с барышнями и преферансом, причем прямо внутри самого скрипта. Но почему-то, при запуске из под cron, питоновский скрипт не может найти свой процесс.
Делаю так:

Код: Выделить всё

result = os.system("ps -ax | grep" + myscript.py)

result парсим и тягаем оттуда инфу, заущен скрипт или нет. Если запускать в консоли, то все это работает, а если из-под cron, то result - пустой.

Charlz_Klug_
проходил мимо

Re: flock (нужен экзампл)

Непрочитанное сообщение Charlz_Klug_ » 2013-07-18 13:51:08

bRUtality писал(а): Делаю так:

Код: Выделить всё

result = os.system("ps -ax | grep" + myscript.py)

result парсим и тягаем оттуда инфу, заущен скрипт или нет. Если запускать в консоли, то все это работает, а если из-под cron, то result - пустой.
Пробуйте полные пути для ps и grep, может и для myscript.py надо указать.

bRUtality
рядовой
Сообщения: 27
Зарегистрирован: 2013-04-04 16:19:32

Re: flock (нужен экзампл)

Непрочитанное сообщение bRUtality » 2013-07-18 13:56:26

Для myscript полный путь не требуется, ведь grep ищет по вхождению части слова. А вот полные пути для ps и grep - это мысль!

bRUtality
рядовой
Сообщения: 27
Зарегистрирован: 2013-04-04 16:19:32

Re: flock (нужен экзампл)

Непрочитанное сообщение bRUtality » 2013-07-18 15:50:54

bRUtality писал(а):А вот полные пути для ps и grep - это мысль!
Увы, не прокатило. Вернул пустой набор.
Что интересно, когда вместо имени скрипта подставил "cron", то результат был.

Charlz_Klug_
проходил мимо

Re: flock (нужен экзампл)

Непрочитанное сообщение Charlz_Klug_ » 2013-07-18 20:08:16

bRUtality писал(а):Что интересно, когда вместо имени скрипта подставил "cron", то результат был.
Погрепайте то, что у вас постоянно висит в процессах. Покажет или нет?

bRUtality
рядовой
Сообщения: 27
Зарегистрирован: 2013-04-04 16:19:32

Re: flock (нужен экзампл)

Непрочитанное сообщение bRUtality » 2013-07-19 8:21:30

Charlz_Klug_ писал(а):
bRUtality писал(а):Что интересно, когда вместо имени скрипта подставил "cron", то результат был.
Погрепайте то, что у вас постоянно висит в процессах. Покажет или нет?
Из консоли? Да, грепается. А из под cron'а - нет.

Charlz_Klug_
проходил мимо

Re: flock (нужен экзампл)

Непрочитанное сообщение Charlz_Klug_ » 2013-07-19 11:38:02

bRUtality писал(а):Из консоли? Да, грепается. А из под cron'а - нет.
УМВР.

Код: Выделить всё

[Charlz_Klug@Meleena]/root>$ cat /etc/crontab | grep /bin/ps
*/5     *       *       *       *       root    /bin/ps ax|/usr/bin/grep smbd
[Charlz_Klug@Meleena]/root>$
[Charlz_Klug@Meleena]/root>$ sudo tail mbox
50023  ??  I        0:00.02 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
50225  ??  I        0:00.02 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
50243  ??  S        0:00.02 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
50487  ??  S        0:00.01 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
50516  ??  I        0:00.01 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
50802  ??  S        0:00.01 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
50820  ??  Ss       0:00.01 /bin/sh -c /bin/ps ax|/usr/bin/grep smbd
50823  ??  S        0:00.00 /usr/bin/grep smbd
94074  ??  I        0:02.33 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf

[Charlz_Klug@Meleena]/root>$
Давайте целиком ваш питоновский сценарий.

bRUtality
рядовой
Сообщения: 27
Зарегистрирован: 2013-04-04 16:19:32

Re: flock (нужен экзампл)

Непрочитанное сообщение bRUtality » 2013-07-19 13:42:01

Сами напросились :)
Скрипт myscript.py (ищет свою же копию в процессах):

Код: Выделить всё

output = commands.getoutput("/bin/ps -ax " /usr/bin/grep myscript.py")
proginfo = string.split(output)
print proginfo
Выдает массив, в котором содержится инфа по процессу (pid, название, оунер и т.п.).
Теперь мы хотим запустить его в кроне:

Код: Выделить всё

*/10 * * * * /usr/local/bin/python  /path_to_script/myscript.py 1>>/path_to_script/cron_out.log 

В cron_out.log печатается Я ответил на ваш вопрос?

Charlz_Klug_
проходил мимо

Re: flock (нужен экзампл)

Непрочитанное сообщение Charlz_Klug_ » 2013-07-19 14:30:02

Код: Выделить всё

[Charlz_Klug@Meleena]~>$ cat sample.py 
#!/usr/local/bin/python -O
import subprocess
import string
subprocess.call("/bin/ps ax|/usr/bin/grep sample", shell=True)

[Charlz_Klug@Meleena]~>$ 
Результат:

Код: Выделить всё

Message 3:
From root@Meleena.local Fri Jul 19 16:25:00 2013
Date: Fri, 19 Jul 2013 16:25:00 +0500 (UZT)
From: root@Meleena.local (Cron Daemon)
To: root@Meleena.local
Subject: Cron <root@Meleena> /home/Charlz_Klug/sample.py
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>

52549  ??  Ss       0:00.06 /usr/local/bin/python -O /home/Charlz_Klug/sample.p
52551  ??  S        0:00.01 /bin/sh -c /bin/ps ax|/usr/bin/grep sample
52553  ??  S        0:00.00 /usr/bin/grep sample

& 

bRUtality
рядовой
Сообщения: 27
Зарегистрирован: 2013-04-04 16:19:32

Re: flock (нужен экзампл)

Непрочитанное сообщение bRUtality » 2013-07-19 14:32:54

А теперь запустите это в кроне :)

Аватара пользователя
Neus
капитан
Сообщения: 1946
Зарегистрирован: 2008-09-08 21:59:56

Re: flock (нужен экзампл)

Непрочитанное сообщение Neus » 2013-07-19 16:01:56

bRUtality писал(а):А теперь запустите это в кроне :)
это крон намылил чего он запустил, внимательнее смотрите :)

Код: Выделить всё

output = commands.getoutput("/bin/ps -ax " /usr/bin/grep myscript.py")
после -ах " а должно быть |
--
а не проще заюзать pgrep ?

Charlz_Klug_
проходил мимо

Re: flock (нужен экзампл)

Непрочитанное сообщение Charlz_Klug_ » 2013-07-19 18:06:51

bRUtality писал(а):А теперь запустите это в кроне :)
Вы не поверите, запускалось в кроне:

Код: Выделить всё

[Charlz_Klug@Meleena]~>$ cat /etc/crontab | grep sample
*/5	*	*	*	*	root	/home/Charlz_Klug/sample.py
[Charlz_Klug@Meleena]~>$ 
.

bRUtality
рядовой
Сообщения: 27
Зарегистрирован: 2013-04-04 16:19:32

Re: flock (нужен экзампл)

Непрочитанное сообщение bRUtality » 2013-07-19 20:44:23

Neus писал(а): это крон намылил чего он запустил, внимательнее смотрите :)
хм... попробую еще раз, может где опечатался
Neus писал(а): после -ах " а должно быть |
В оригинале есть. Похоже, форумный парсер съел этот символ.