<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Про запуск скриптов по крону</title>
	<atom:link href="http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/feed/" rel="self" type="application/rss+xml" />
	<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/</link>
	<description>Самый интересный SEO блог</description>
	<lastBuildDate>Sat, 11 Feb 2012 00:15:17 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: TerVer</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3488</link>
		<dc:creator>TerVer</dc:creator>
		<pubDate>Mon, 29 Sep 2008 11:25:41 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3488</guid>
		<description>Ed, спасибо - то что нужно!
на php получилось вот так
$max_thr=3;
exec(&quot;/bin/ps ax&#124;/bin/grep &quot;.__FILE__,$res,$err);
if ((count($res)-1)&gt;=$max_thr)
      exit();

Вообще с фаилами меня больше всего добивает что нужно править скрипты инициализации системы, т.е. удалять флаг-фаилы после ребута. Но от этого никуда не деться :(</description>
		<content:encoded><![CDATA[<p>Ed, спасибо &#8211; то что нужно!<br />
на php получилось вот так<br />
$max_thr=3;<br />
exec(&#8220;/bin/ps ax|/bin/grep &#8220;.__FILE__,$res,$err);<br />
if ((count($res)-1)&gt;=$max_thr)<br />
      exit();</p>
<p>Вообще с фаилами меня больше всего добивает что нужно править скрипты инициализации системы, т.е. удалять флаг-фаилы после ребута. Но от этого никуда не деться <img src='http://alexf.name/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ed</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3487</link>
		<dc:creator>Ed</dc:creator>
		<pubDate>Mon, 29 Sep 2008 10:31:54 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3487</guid>
		<description>Alexf, ты уж определись, что тебе надо. Пишешь пост про крон, тут упоминаешь про запуск wget&#039;ом.

В любом случае, если тебе надо, чтобы число одновременно запущенных процессов не превышало заданного числа (не важно, один ли это процесс, запущенный по крону, или парсер, запущенный в 16 стволов по числу айпишников сервера), следует смотреть число выполняющихся программ, например, с помощью команды ps ax&#124;grep 

Решение с файлом не самое лучшее. Представь себе, запустил ты процесс, и он по какой-то причине пашет очень долго. Наступает момент запуска процесса (по крону, или wget-ом - неважно), процесс видит твой lock-файл и считает его уже устаревшим. Что он сделает? Правильно, удалит lock-файл и запустит второй экземпляр процесса.

to TerVer:

my @proc = `ps ax&#124;grep parser.pl`;
if ($#proc == 1)
{
   #do this dirty job
}
else
{
   #exit
}</description>
		<content:encoded><![CDATA[<p>Alexf, ты уж определись, что тебе надо. Пишешь пост про крон, тут упоминаешь про запуск wget&#8217;ом.</p>
<p>В любом случае, если тебе надо, чтобы число одновременно запущенных процессов не превышало заданного числа (не важно, один ли это процесс, запущенный по крону, или парсер, запущенный в 16 стволов по числу айпишников сервера), следует смотреть число выполняющихся программ, например, с помощью команды ps ax|grep </p>
<p>Решение с файлом не самое лучшее. Представь себе, запустил ты процесс, и он по какой-то причине пашет очень долго. Наступает момент запуска процесса (по крону, или wget-ом &#8211; неважно), процесс видит твой lock-файл и считает его уже устаревшим. Что он сделает? Правильно, удалит lock-файл и запустит второй экземпляр процесса.</p>
<p>to TerVer:</p>
<p>my @proc = `ps ax|grep parser.pl`;<br />
if ($#proc == 1)<br />
{<br />
   #do this dirty job<br />
}<br />
else<br />
{<br />
   #exit<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alexf</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3486</link>
		<dc:creator>alexf</dc:creator>
		<pubDate>Mon, 29 Sep 2008 09:46:34 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3486</guid>
		<description>Скрипт может запускаться из апача wget&#039;ом, так что записывать и смотреть процессы это не универсальное решение. Как и семафоры, это не &quot;гораздо лучше&quot;, а как раз наоборот, поскольку их надо доставлять отдельно, то есть решение будет не универсальное.</description>
		<content:encoded><![CDATA[<p>Скрипт может запускаться из апача wget&#8217;ом, так что записывать и смотреть процессы это не универсальное решение. Как и семафоры, это не &#8220;гораздо лучше&#8221;, а как раз наоборот, поскольку их надо доставлять отдельно, то есть решение будет не универсальное.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TerVer</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3485</link>
		<dc:creator>TerVer</dc:creator>
		<pubDate>Mon, 29 Sep 2008 09:30:22 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3485</guid>
		<description>Ed и gman, вы бы примерчие для нас недалеких бы дали
типа такого на фаилах
$mdir=&quot;/home/...&quot;;
if (file_exists(&quot;$mdir/running.flg&quot;))
    exit();
file_put_contents(&quot;$mdir/running.flg&quot;,&quot;runing ept &quot;.date(&quot;D M j G:i:s T Y&quot;));
  function f_ex()
  {
      global $mdir;
      unlink(&quot;$mdir/running.flg&quot;);      
  }
  register_shutdown_function(&quot;f_ex&quot;);</description>
		<content:encoded><![CDATA[<p>Ed и gman, вы бы примерчие для нас недалеких бы дали<br />
типа такого на фаилах<br />
$mdir=&#8221;/home/&#8230;&#8221;;<br />
if (file_exists(&#8220;$mdir/running.flg&#8221;))<br />
    exit();<br />
file_put_contents(&#8220;$mdir/running.flg&#8221;,&#8221;runing ept &#8220;.date(&#8220;D M j G:i:s T Y&#8221;));<br />
  function f_ex()<br />
  {<br />
      global $mdir;<br />
      unlink(&#8220;$mdir/running.flg&#8221;);<br />
  }<br />
  register_shutdown_function(&#8220;f_ex&#8221;);</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: gman</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3484</link>
		<dc:creator>gman</dc:creator>
		<pubDate>Mon, 29 Sep 2008 09:02:09 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3484</guid>
		<description>Офигенную тему спалил )))
Мне кажется что человек который не додумается сам даже создавать файл чтобы проверить работает ли скрипт, вряд ли сможет заниматься созданием вообще каких-то крон скриптов, да и вообще скриптов. 

Кстати в если скрипт работает в линуксе то гораздо луче использовать встроенные в пхп семафоры: http://se.php.net/manual/en/book.sem.php

Да и вообще, для этого есть куча готовых классов, например как этот, работающий и в винде и в юниксах http://se.php.net/manual/en/ref.sem.php#72600</description>
		<content:encoded><![CDATA[<p>Офигенную тему спалил )))<br />
Мне кажется что человек который не додумается сам даже создавать файл чтобы проверить работает ли скрипт, вряд ли сможет заниматься созданием вообще каких-то крон скриптов, да и вообще скриптов. </p>
<p>Кстати в если скрипт работает в линуксе то гораздо луче использовать встроенные в пхп семафоры: <a href="http://se.php.net/manual/en/book.sem.php" rel="nofollow">http://se.php.net/manual/en/book.sem.php</a></p>
<p>Да и вообще, для этого есть куча готовых классов, например как этот, работающий и в винде и в юниксах <a href="http://se.php.net/manual/en/ref.sem.php#72600" rel="nofollow">http://se.php.net/manual/en/ref.sem.php#72600</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ed</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3483</link>
		<dc:creator>Ed</dc:creator>
		<pubDate>Mon, 29 Sep 2008 07:36:37 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3483</guid>
		<description>Вообще в скрипте можно смотреть список запущенных процессов, и если копий скрипта запущено больше одной - просто завершать работу скрипта.</description>
		<content:encoded><![CDATA[<p>Вообще в скрипте можно смотреть список запущенных процессов, и если копий скрипта запущено больше одной &#8211; просто завершать работу скрипта.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: TYUS</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3482</link>
		<dc:creator>TYUS</dc:creator>
		<pubDate>Mon, 29 Sep 2008 05:34:12 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3482</guid>
		<description>Я почему-то думал тут увидеть способы запуска крона, параметры там и т.п.</description>
		<content:encoded><![CDATA[<p>Я почему-то думал тут увидеть способы запуска крона, параметры там и т.п.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: square</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3481</link>
		<dc:creator>square</dc:creator>
		<pubDate>Mon, 29 Sep 2008 05:03:36 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3481</guid>
		<description>Если уж создается &quot;файл-флаг&quot; для процесса, то удобно записать в него и идентификатор процесса, т.е. создать *.pid-файл, тогда можно не только проверить запущен ли скрипт, но и прибить его в случае слишком длительной работы.</description>
		<content:encoded><![CDATA[<p>Если уж создается &#8220;файл-флаг&#8221; для процесса, то удобно записать в него и идентификатор процесса, т.е. создать *.pid-файл, тогда можно не только проверить запущен ли скрипт, но и прибить его в случае слишком длительной работы.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: moreilcon</title>
		<link>http://alexf.name/2008-09-29/pro-zapusk-skriptov-po-kronu/comment-page-1/#comment-3479</link>
		<dc:creator>moreilcon</dc:creator>
		<pubDate>Mon, 29 Sep 2008 02:09:36 +0000</pubDate>
		<guid isPermaLink="false">http://alexf.name/?p=332#comment-3479</guid>
		<description>ололо.

man 2 flock

а именно:

lock_fd = open(lock_path, O_RDWR);
if (lock_id == -1)
{
    complain(&quot;failed to open lock file %s, error is: %s&quot;, lock_path, strerror(errno));
    abort();
}

if (flock(lock_fd, LOCK_EX &#124; LOCK_NB))
{
    do_whatever_you_need();
    flock(lock_fd, LOCK_UN);
}
else
{
    if (errno == EWOULDBLOCK)
        complain(&quot;other process still has lock on %s&quot;, lock_path)
    else
        complain(&quot;failed to lock file %s, error is: %s&quot;, lock_path, strerror(errno));
    abort();
}

return 0;

трансляцию на похапе и ретрай на EAGAIN и EINTR думаю уже можно самому асилить.</description>
		<content:encoded><![CDATA[<p>ололо.</p>
<p>man 2 flock</p>
<p>а именно:</p>
<p>lock_fd = open(lock_path, O_RDWR);<br />
if (lock_id == -1)<br />
{<br />
    complain(&#8220;failed to open lock file %s, error is: %s&#8221;, lock_path, strerror(errno));<br />
    abort();<br />
}</p>
<p>if (flock(lock_fd, LOCK_EX | LOCK_NB))<br />
{<br />
    do_whatever_you_need();<br />
    flock(lock_fd, LOCK_UN);<br />
}<br />
else<br />
{<br />
    if (errno == EWOULDBLOCK)<br />
        complain(&#8220;other process still has lock on %s&#8221;, lock_path)<br />
    else<br />
        complain(&#8220;failed to lock file %s, error is: %s&#8221;, lock_path, strerror(errno));<br />
    abort();<br />
}</p>
<p>return 0;</p>
<p>трансляцию на похапе и ретрай на EAGAIN и EINTR думаю уже можно самому асилить.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

