<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: именованные каналы(FIFO), проблема чтения</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html</link>
    <description>Привет всем! Столкнулся с такой проблемой: &lt;br&gt;Имеется syslog-ng, который ловит логи от виндовой машины на udp порт. Затем я пытаюсь перенаправить их пайпом в perl скрипт, через обьект FIFO, предварительно созданный с помощью mkfifo(). Права на FIFO - rw у рута. syslog-ng и скрипт запускаются под rootом.&lt;br&gt;&lt;br&gt;destination &#123; pipe(/scripts/syslog-ng.pipe); &#125;;&lt;br&gt;&lt;br&gt;На стороне скрипта, открываю FIFO на чтение функцией open.&lt;br&gt;&lt;br&gt;open($hLog, &apos;&amp;lt;&apos;, &apos;/scripts/syslog-ng.pipe&apos;); &lt;br&gt;&lt;br&gt;Затем пытаюсь парсить полученые строки и запихивать в базу. Примерно так...&lt;br&gt;while(&amp;lt;$hLog&amp;gt;)&lt;br&gt;&#123;&lt;br&gt;  #обработка текущей строки $_&lt;br&gt;  #Запись в базу...&lt;br&gt;&#125;&lt;br&gt;Скрипт ругается на не верный SQL запрос!&lt;br&gt;После того как я перед обработкой строки, вывожу ее в STDOUT, все начинает работать без проблем. Строки базы успешно добавляются.&lt;br&gt;while(&amp;lt;$hLog&amp;gt;)&lt;br&gt;&#123;&lt;br&gt;  print $_; #!!!!&lt;br&gt;  #обработка текущей строки $_&lt;br&gt;  #Запись в базу...&lt;br&gt;&#125;&lt;br&gt;Не могу понять в чем проблема, может в блокировке FIFO? Обьясните пожалуйста!&lt;br&gt;ЗЫ:Заранее благодарен.&lt;br&gt;</description>

<item>
    <title>именованные каналы(FIFO), проблема чтения (NuINu)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html#9</link>
    <pubDate>Sat, 28 Jun 2008 15:32:16 GMT</pubDate>
    <description>добавлю к замечаниям&lt;br&gt;&lt;br&gt;&amp;gt;while(&amp;lt;$hLog&amp;gt;)&lt;br&gt;&amp;gt; &#123; &lt;br&gt;&amp;gt;  if($_=~/(&#092;S&#123;3&#125;)&#092;s?(&#092;d&#123;2&#125;)&#092;s?(&#092;d&#123;2&#125;&#092;:?&#092;d&#123;2&#125;&#092;:?&#092;d&#123;2&#125;)&#092;s?(&#092;d&#123;4&#125;)&#092;s+(&#092;d&#123;3&#125;)&#092;s+&#092;S+&#092;s+(&#092;S+)/) &lt;br&gt;&lt;br&gt;вот это вот конструкция очень подозрительна&lt;br&gt;if($_ =~ /***/)&lt;br&gt;&lt;br&gt;замените ее на:&lt;br&gt;while($in = &amp;lt;$hLog&amp;gt;) &#123;&lt;br&gt;&#123;&lt;br&gt; а вот здесь надо выствить значения переменных по умолчанию, иначе, в случае невыполнения if они у вас будут использоваться со значениями последного успешного предыдущего шага&lt;br&gt;&lt;br&gt;&lt;br&gt; if($in =~ m/***/)&lt;br&gt;и далее по тексту замените $_ на $in, либо посто уберите &apos;$_ =~&apos;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>именованные каналы(FIFO), проблема чтения (bosschifra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html#8</link>
    <pubDate>Thu, 26 Jun 2008 13:38:35 GMT</pubDate>
    <description>а какой прогой вы загоняете логи винды на syslog ?????&lt;br&gt;неподелитесь?&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>именованные каналы(FIFO), проблема чтения (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html#7</link>
    <pubDate>Mon, 24 Mar 2008 15:37:01 GMT</pubDate>
    <description>Если вы не можете разобрать свой же код, то и не знаю чем помочь. Могу только предложить попробовать:&lt;br&gt;1. Попробуйте в консольном клиенте мускула запрос insert into some_table (date,code) values (&apos;&apos;,)&lt;br&gt;2. perl -e &apos;$a=1,$b=2; print &quot;$a $b&#092;n&quot;; $a,$b=&quot;&quot;;print &quot;$a $b&#092;n&quot;;&apos;&lt;br&gt;&lt;br&gt;&amp;gt;Дело в том что когда я скармливаю скрипту файл, все прекрасно работает&lt;br&gt;&lt;br&gt;Ваш код по своей сути неустойчив, он не способен адекватно реагировать на некорректные данные, что мы и наблюдаем. Если вы не хотите об этом задумываться и предпочитаете &quot;быдлокодить&quot;, то это ваше право. Способ как решить проблему в лоб вы и сами нашли, разбираться в причинах вам неохота, так что же вы хотите?&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>именованные каналы(FIFO), проблема чтения (stas)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html#6</link>
    <pubDate>Mon, 24 Mar 2008 07:47:47 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;    chop($addr); &lt;br&gt;&amp;gt;   &#125; &lt;br&gt;&amp;gt;  elsif($_=~/(&#092;d+&#092;.&#123;1&#125;)&#123;3&#125;&#092;d+/)  # $&amp; - ip addr &lt;br&gt;&amp;gt;   &#123; &lt;br&gt;&amp;gt;    $addr=$&amp;; &lt;br&gt;&amp;gt;   &#125; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;  $dBase-&amp;gt;do(&quot;insert into &quot;.$dbTable.&quot; (date,time,user,ip,code) values (&apos;&quot;.$date.&quot;&apos;,&apos;&quot;.$time.&quot;&apos;,&apos;&quot;.$user.&quot;&apos;,&apos;&quot;.$addr.&quot;&apos;,&quot;.$code.&quot;);&quot;);&lt;br&gt;&amp;gt;  $date, $time, $user, $code, $addr=&apos;&apos;; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&lt;br&gt;Вставьте перед строчкой&lt;br&gt;$dBase-&amp;gt;do(&quot;insert into &quot;.$dbTable.&quot; (date,time,user,ip,code) values (&apos;&quot;.$date.&quot;&apos;,&apos;&quot;.$time.&quot;&apos;,&apos;&quot;.$user.&quot;&apos;,&apos;&quot;.$addr.&quot;&apos;,&quot;.$code.&quot;);&quot;);&lt;br&gt;оператор print, который будет выводит строку вашего запроса&lt;br&gt;print &quot;insert into &quot;.$dbTable.&quot; (date,time,user,ip,code) values (&apos;&quot;.$date.&quot;&apos;,&apos;&quot;.$time.&quot;&apos;,&apos;&quot;.$user.&quot;&apos;,&apos;&quot;.$addr.&quot;&apos;,&quot;.$code.&quot;);&quot;; &lt;br&gt;И посмотрите, что с ней не так.&lt;br&gt;</description>
</item>

<item>
    <title>именованные каналы(FIFO), проблема чтения (cricket)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html#5</link>
    <pubDate>Mon, 24 Mar 2008 07:12:40 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;переменных придет пустыми(это в перле, в С, например, они будут иметь &lt;br&gt;&amp;gt;произвольные значения) и значит запрос будет некорректным. Вторая ошибка чуть более &lt;br&gt;&amp;gt;высокого уровня - всегда надежней использовать параметризованные запросы через prepare+execute, чем &lt;br&gt;&amp;gt;самому загонять переменные в строку, это избавит от целого ряда проблем. &lt;br&gt;&amp;gt;Также есть неточности в регексах и корявый синтаксис, но это мелочи. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;По поводу изменения поведения при print, могу лишь предположить что почему-то нарушается &lt;br&gt;&amp;gt;считывание по границе &#092;n и print это как то исправляет, может &lt;br&gt;&amp;gt;из-за задержки с выводом, надо нормально поотлаживать, чтобы сказать наверняка. Однако &lt;br&gt;&amp;gt;в любом случае проблема в неправильном коде, он исключительно неустойчив. &lt;br&gt;&lt;br&gt;Прошу прощения, а где Вы нашли обьявление переменных внутри блока условия и использование их за пределами блока? Все переменные обьявляются и инициализируются вверху по тексту программы. Дело в том что когда я скармливаю скрипту файл, все прекрасно работает. Н</description>
</item>

<item>
    <title>именованные каналы(FIFO), проблема чтения (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html#4</link>
    <pubDate>Sun, 23 Mar 2008 23:13:27 GMT</pubDate>
    <description>Попросите кого-нибудь переписать этот скрипт. Вы делаете одну из самых грубых ошибок в программировании - инициализация переменных внутри блока условия и использование их за пределами этого блока. Как следствие всегда есть шанс, что часть переменных придет пустыми(это в перле, в С, например, они будут иметь произвольные значения) и значит запрос будет некорректным. Вторая ошибка чуть более высокого уровня - всегда надежней использовать параметризованные запросы через prepare+execute, чем самому загонять переменные в строку, это избавит от целого ряда проблем. Также есть неточности в регексах и корявый синтаксис, но это мелочи.  &lt;br&gt;По поводу изменения поведения при print, могу лишь предположить что почему-то нарушается считывание по границе &#092;n и print это как то исправляет, может из-за задержки с выводом, надо нормально поотлаживать, чтобы сказать наверняка. Однако в любом случае проблема в неправильном коде, он исключительно неустойчив. &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>именованные каналы(FIFO), проблема чтения (cricket)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html#3</link>
    <pubDate>Sun, 23 Mar 2008 13:04:38 GMT</pubDate>
    <description>конфиг syslog-ng:&lt;br&gt;&lt;br&gt;options &#123;&lt;br&gt;        sync (0);&lt;br&gt;        time_reopen (10);&lt;br&gt;        log_fifo_size (1000);&lt;br&gt;        long_hostnames (off);&lt;br&gt;        use_dns (no);&lt;br&gt;        use_fqdn (no);&lt;br&gt;        create_dirs (no);&lt;br&gt;        keep_hostname (yes);&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;source ext_logger &#123;&lt;br&gt;        unix-stream (&quot;/dev/log&quot;);&lt;br&gt;        udp( ip(xxx.xxx.xxx.xxx) port(xxxx));&lt;br&gt;        internal();&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;destination my_wks &#123; fifo(&quot;/logs/scripts/syslog-ng.pipe&quot;); &#125;;&lt;br&gt;&lt;br&gt;&lt;br&gt;log &#123; source(ext_logger); destination(my_wks); flags(final); &#125;;&lt;br&gt;&lt;br&gt;;---------------------------------------------------------------------&lt;br&gt;скрипт:&lt;br&gt;&lt;br&gt;#!/usr/bin/perl&lt;br&gt;&lt;br&gt;my $Pipe=&apos;/logs/scripts/syslog-ng.pipe&apos;;&lt;br&gt;&lt;br&gt;use DBI;&lt;br&gt;&lt;br&gt;my $hLog; #Log file handle&lt;br&gt;my $dbTable=&apos;xxxx&apos;; #Name of dBase Table&lt;br&gt;my $date=&apos;&apos;; #Event date&lt;br&gt;my $time=&apos;&apos;; #Event time&lt;br&gt;my $user=&apos;&apos;; #User&lt;br&gt;my $code=&apos;&apos;; #Event code&lt;br&gt;my $addr=&apos;&apos;; #host ip&lt;br&gt;&#037;month = (&apos;Jan&apos;=&amp;gt;&apos;01&apos;, &apos;Feb&apos;=&amp;gt;&apos;02&apos;, &apos;Mar&apos;=&amp;gt;&apos;03&apos;, &apos;Apr&apos;=&amp;gt;&apos;04&apos;, &apos;May&apos;=&amp;gt;&apos;05&apos;, &apos;Jun&apos;=&amp;gt;&apos;06&apos;, &apos;Jul&apos;=&amp;gt;&apos;07&apos;, &apos;Aug&apos;=&amp;gt;&apos;08&apos;, &apos;Sep&apos;=&amp;gt;&apos;09&apos;, &apos;Oct&apos;=&amp;gt;&apos;10&apos;&lt;br&gt;, &apos;Nov&apos;=&amp;gt;&apos;11&apos;, &apos;Dec&apos;=</description>
</item>

<item>
    <title>именованные каналы(FIFO), проблема чтения (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7268.html#2</link>
    <pubDate>Sun, 23 Mar 2008 11:00:25 GMT</pubDate>
    <description>Краткое содержание вашего поста: &quot;у меня есть некая херня, она не работает, херню я вам не покажу, но ошибку пожалуйста найдите&quot;. &lt;br&gt;Вы ошиблись, уважаемый, форум телепатов не здесь. &lt;br&gt;</description>
</item>

</channel>
</rss>
