<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Как проверить, был ли уже запущен скрипт (из самого скрипта)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/3913.html</link>
    <description>Есть скрипт, который работает по крону. Но может быть такая ситуация, что какой-то запуск скрипта будет при ещё не отработавшем &quot;старом&quot;. Такой ситуации быть не должно.&lt;br&gt;&lt;br&gt;Если в скрипте написать (под солярисом):&lt;br&gt;ps -ef &amp;#124; grep -v grep &amp;#124; grep -с &quot;&#096;basename $0&#096;$&quot;&lt;br&gt;то он показывает как раз то, что надо, однако при этом не проверишь результат. Но, если сделать так:&lt;br&gt;BN=&#096;basename $0&#096;&lt;br&gt;OUT=&#096;ps -ef &amp;#124; grep -v grep &amp;#124; grep -с &quot;$&#123;BN&#125;$&quot;&#096;&lt;br&gt;echo $OUT&lt;br&gt;То получается &quot;лишний&quot; процесс из-за &quot;подстановки&quot;.&lt;br&gt;Думаю, что как-то надо сюда прикрутить $PPID. Может кто подскажет?&lt;br&gt;</description>

<item>
    <title>Как проверить, был ли уже запущен скрипт (из самого скрипта) (Виктор Хаблученко)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/3913.html#2</link>
    <pubDate>Fri, 05 Feb 2010 12:09:11 GMT</pubDate>
    <description>Я делал вот так:&lt;br&gt;&lt;br&gt;SCRIPTDIR=&quot;/home/jagura/temp/scripts/&quot;&lt;br&gt;&lt;br&gt;NAME=&#096;basename $0&#096;&lt;br&gt;&lt;br&gt;BYZA=&#096;ps -ef &amp;#124; grep $NAME &amp;#124; grep -v grep &amp;#124; grep -v $$ &amp;#124; wc -l&#096;&lt;br&gt;echo $$&lt;br&gt;if &#091; &quot;$BYZA&quot; != 0 &#093;;                                           # found another instance&lt;br&gt;then&lt;br&gt;echo FOUND another instance running!&lt;br&gt;exit&lt;br&gt;fi&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-----&lt;br&gt;Простенько, и работает безотказно.&lt;br&gt;</description>
</item>

<item>
    <title>Как проверить, был ли уже запущен скрипт (из самого скрипта) (allez)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/3913.html#1</link>
    <pubDate>Fri, 04 Feb 2005 04:15:03 GMT</pubDate>
    <description>Можно в начале работы скрипта создать lock-файл вида &amp;lt;имя_скрипта&amp;gt;.&amp;lt;PID_скрипта&amp;gt;, командой touch &quot;&#096;basename $0&#096;.$$&quot;, предварительно проверив следующие условия:&lt;br&gt;1. Наличие lock-файла.&lt;br&gt;2. Наличие процесса с PID, совпадающим с указанным в имени lock-файла.&lt;br&gt;&lt;br&gt;Если условие 1 ложно - значит, нет еще одного экземпляра нашего скрипта; создаем lock-файл и работаем дальше.&lt;br&gt;&lt;br&gt;Если условие 1 истинно, а условие 2 ложно - значит предыдущий сеанс работы скрипта завершился аварийно и lock-файл не удален; удаляем, создаем новый, работаем дальше. (Примечание: следует в скрипт вставить перехват прерываний и в обработке оных вставить удаление lock-файла. Штатное завершение скрипта тоже можно провести через этот обработчик.)&lt;br&gt;&lt;br&gt;Если истинны оба условия - значит скрипт еще работает, завершаем работу.&lt;br&gt;&lt;br&gt;Вот примерно так оно и делается...&lt;br&gt;&lt;br&gt;---------------------------------------------------&lt;br&gt;#!/bin/bash&lt;br&gt;&lt;br&gt;trap &quot;my_exit&quot; 2 9 15 # Перехват сигналов и отправка их на обработку&lt;br&gt;&lt;br&gt;function my_exit() &#123;&lt;br&gt;  echo &quot;Deleting $LOCKFILE </description>
</item>

</channel>
</rss>
