<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: crontab и правильное экранирование</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html</link>
    <description>Уважаемые господа, помогите пожалуйста разобраться с экранированием в crontab.&lt;br&gt;&lt;br&gt;Общий вопрос в том, что комманда (трехэтажная) прекрасно запускается и работает из командной строки, но не работает когда ее помещаю в crontab.&lt;br&gt;Как я понимаю, нужно сделать правильное экранирование символов, а вот как именно, не совсем понятно.&lt;br&gt;&lt;br&gt;Вот комманда:&lt;br&gt;cd /mnt/sdb/report; ls -1 &amp;#124; sed &apos;/tbz2/d; /$(date --date=6&#092; months&#092; ago +&#037;Y&#037;m)/,&#092;$d&apos; &amp;#124; xargs -n 1 -I &#123;&#125; tar cjpf &#123;&#125;.tbz2 &#123;&#125; --remove-files&lt;br&gt;&lt;br&gt;ее смысл:&lt;br&gt;&lt;br&gt;есть директории вида YYYYMMDD, нужно выбрать те, которые старше 6-ти месяцев и сжать tar-ом, каждую в свой файл.&lt;br&gt;&lt;br&gt;ls -1          выводит в алфавитном порядке&lt;br&gt;sed            выкидываем архивы и то что новее 6-ти месяцев&lt;br&gt;date --date=6&#092; months&#092; ago +&#037;Y&#037;m   дает месяц 6 месяцев назад&lt;br&gt;&lt;br&gt;на xargs и т.д. можно не обращать внимания&lt;br&gt;&lt;br&gt;В crontab пишу так:&lt;br&gt;0 3 1 * * cd /mnt/sdb/report; ls -1 &amp;#124; sed &apos;/tbz2/d; /$(date --date=6&#092; months&#092; ago +&#037;Y&#037;m)/,&#092;$d&apos; &amp;#124; xargs -n 1 -I &#123;&#125; tar cjpf &#123;&#125;.tbz2 &#123;&#125; --remove-files</description>

<item>
    <title>crontab и правильное экранирование (LSTemp)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#15</link>
    <pubDate>Thu, 29 Nov 2012 06:08:55 GMT</pubDate>
    <description>&amp;gt;&amp;gt; &#091;root&#064;local ~&#093;# whereis date &lt;br&gt;&amp;gt; очень правильно, для крона - только так.&lt;br&gt;&amp;gt;&amp;gt; my_date=&#096;/bin/date&#096; &lt;br&gt;&amp;gt; правильно и кроссплатформенно (гы - православно!).&lt;br&gt;&amp;gt;&amp;gt; my_date=$(/bin/date) &lt;br&gt;&amp;gt; только под линуксы ну и где ещё sh=bash &lt;br&gt;&amp;gt;&amp;gt; /bin/date +&#037;Y&#037;m &lt;br&gt;&amp;gt; неправильно, правильно /bin/date &apos;+&#037;Y&#037;m&apos; &lt;br&gt;&lt;br&gt;похрену сама команда и ее синтаксис в этом конкретном случае - суть в том, что путь к ней полностью прописать надо.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>crontab и правильное экранирование (Аноним)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#14</link>
    <pubDate>Thu, 29 Nov 2012 04:37:14 GMT</pubDate>
    <description>&amp;gt; &#091;root&#064;local ~&#093;# whereis date &lt;br&gt;&lt;br&gt;очень правильно, для крона - только так.&lt;br&gt;&lt;br&gt;&amp;gt; my_date=&#096;/bin/date&#096; &lt;br&gt;&lt;br&gt;правильно и кроссплатформенно (гы - православно!).&lt;br&gt;&lt;br&gt;&amp;gt; my_date=$(/bin/date) &lt;br&gt;&lt;br&gt;только под линуксы ну и где ещё sh=bash&lt;br&gt;&lt;br&gt;&amp;gt; /bin/date +&#037;Y&#037;m &lt;br&gt;&lt;br&gt;неправильно, правильно /bin/date &apos;+&#037;Y&#037;m&apos; &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>crontab и правильное экранирование (LSTemp)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#13</link>
    <pubDate>Wed, 28 Nov 2012 20:58:14 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt; а должен? задайте себе вопрос под каким шелом крон работает и под &lt;br&gt;&amp;gt;&amp;gt; каким Вы тестировали скрипт.&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 2. не нравится символ + в параметрах команды date &lt;br&gt;&amp;gt;&amp;gt; экранировать в соответсвии с праилами шела, который использует крон.&lt;br&gt;&amp;gt; Вы все правильно говорите, буду очень признателен, если вы сможете написать мне &lt;br&gt;&amp;gt; правильно экранированную сроку для crontab хотя бы одной из этих команд &lt;br&gt;&amp;gt; (или всех, если у вас это получится): &lt;br&gt;&amp;gt; my_date=&#096;date&#096; &lt;br&gt;&amp;gt; my_date=$(date) &lt;br&gt;&amp;gt; date +&#037;Y&#037;m &lt;br&gt;&lt;br&gt;1)&lt;br&gt;&#091;root&#064;local ~&#093;# whereis date&lt;br&gt;date: /bin/date&lt;br&gt;&lt;br&gt;my_date=&#096;/bin/date&#096;&lt;br&gt;my_date=$(/bin/date)&lt;br&gt;/bin/date +&#037;Y&#037;m&lt;br&gt;&lt;br&gt;Читайте то, что Вам выше писали про пути. Я уже пытался показать Вам, что для разных пользователей $PATH отличется. У crona PATH по умолчанию (как правило) просто нет.&lt;br&gt;&lt;br&gt;2)&lt;br&gt;По умолчанию cron пускает скрипты под оболочкой sh, но что у Вас за система и что там накручено - бог знает - инфы нет. Под sh из командной строки Вы проверяли. Значит дело в п.1 или в том, что используется другой шелл </description>
</item>

<item>
    <title>crontab и правильное экранирование (mr_tee)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#12</link>
    <pubDate>Tue, 27 Nov 2012 09:22:35 GMT</pubDate>
    <description>&lt;br&gt;&amp;gt;&amp;gt; 1. crontab не пропускает конструкции &#096;команда&#096; и $(команда) &lt;br&gt;&amp;gt; а должен? задайте себе вопрос под каким шелом крон работает и под &lt;br&gt;&amp;gt; каким Вы тестировали скрипт.&lt;br&gt;&amp;gt;&amp;gt; 2. не нравится символ + в параметрах команды date &lt;br&gt;&amp;gt; экранировать в соответсвии с праилами шела, который использует крон.&lt;br&gt;&lt;br&gt;Вы все правильно говорите, буду очень признателен, если вы сможете написать мне правильно экранированную сроку для crontab хотя бы одной из этих команд (или всех, если у вас это получится):&lt;br&gt;&lt;br&gt;my_date=&#096;date&#096;&lt;br&gt;&lt;br&gt;my_date=$(date)&lt;br&gt;&lt;br&gt;date +&#037;Y&#037;m&lt;br&gt;</description>
</item>

<item>
    <title>crontab и правильное экранирование (LSTemp)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#11</link>
    <pubDate>Thu, 22 Nov 2012 01:19:39 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Уважаемые господа, помогите пожалуйста разобраться с экранированием в crontab.&lt;br&gt;&amp;gt;&amp;gt; Общий вопрос в том, что комманда (трехэтажная) прекрасно запускается и работает из &lt;br&gt;&amp;gt;&amp;gt; командной строки, но не работает когда ее помещаю в crontab.&lt;br&gt;&amp;gt;&amp;gt; Как я понимаю, нужно сделать правильное экранирование символов, а вот как именно, &lt;br&gt;&amp;gt;&amp;gt; не совсем понятно.&lt;br&gt;&amp;gt;&amp;gt; есть директории вида YYYYMMDD, нужно выбрать те, которые старше 6-ти месяцев и &lt;br&gt;&amp;gt;&amp;gt; сжать tar-ом, каждую в свой файл.&lt;br&gt;&amp;gt; Итак, результаты изысканий: &lt;br&gt;&amp;gt; 1. crontab не пропускает конструкции &#096;команда&#096; и $(команда) &lt;br&gt;&lt;br&gt;а должен? задайте себе вопрос под каким шелом крон работает и под каким Вы тестировали скрипт.&lt;br&gt;&lt;br&gt;&amp;gt; 2. не нравится символ + в параметрах команды date &lt;br&gt;&lt;br&gt;экранировать в соответсвии с праилами шела, который использует крон.&lt;br&gt;&lt;br&gt;&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; ничего лишнего случайно не обработалось, мало ли что там появится в &lt;br&gt;&amp;gt; будущем.&lt;br&gt;&amp;gt; ls -1 &amp;#124; sed -n &apos;/^&#091;0-9&#093;&#092;&#123;8&#092;&#125;$/p&apos; &lt;br&gt;&amp;gt; После сортировки этого строка YYYYMM!! оказывается между списком того, что старее</description>
</item>

<item>
    <title>crontab и правильное экранирование (mr_tee)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#10</link>
    <pubDate>Wed, 21 Nov 2012 07:59:36 GMT</pubDate>
    <description>&amp;gt; Уважаемые господа, помогите пожалуйста разобраться с экранированием в crontab.&lt;br&gt;&amp;gt; Общий вопрос в том, что комманда (трехэтажная) прекрасно запускается и работает из &lt;br&gt;&amp;gt; командной строки, но не работает когда ее помещаю в crontab.&lt;br&gt;&amp;gt; Как я понимаю, нужно сделать правильное экранирование символов, а вот как именно, &lt;br&gt;&amp;gt; не совсем понятно.&lt;br&gt;&amp;gt; есть директории вида YYYYMMDD, нужно выбрать те, которые старше 6-ти месяцев и &lt;br&gt;&amp;gt; сжать tar-ом, каждую в свой файл.&lt;br&gt;&lt;br&gt;Итак, результаты изысканий:&lt;br&gt;1. crontab не пропускает конструкции &#096;команда&#096; и $(команда)&lt;br&gt;2. не нравится символ + в параметрах команды date&lt;br&gt;&lt;br&gt;Работающий итог следующий:&lt;br&gt;&lt;br&gt;cd /mnt/sdb/report; (/bin/date --date=6&#092; months&#092; ago -I &amp;#124; sed &apos;s/-//; s/-.*$/!!/&apos;; ls -1 &amp;#124; sed -n &apos;/^&#091;0-9&#093;&#092;&#123;8&#092;&#125;$/p&apos;) &amp;#124; sort &amp;#124; sed &apos;/!!/,$d&apos; &amp;#124; xargs -n 1 -I &#123;&#125; tar cjpf &#123;&#125;.tbz2 &#123;&#125; --remove-files&lt;br&gt;&lt;br&gt;Краткое пояснение (для себя ;-))&lt;br&gt;&lt;br&gt;Дает дату 6 месяцев назад в виде YYYYMM!!&lt;br&gt;/bin/date --date=6&#092; months&#092; ago -I &amp;#124; sed &apos;s/-//; s/-.*$/!!/&apos;&lt;br&gt;&lt;br&gt;Список всего вида Y</description>
</item>

<item>
    <title>crontab и правильное экранирование (LSTemp)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#9</link>
    <pubDate>Tue, 20 Nov 2012 01:59:38 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Написать скрипт, отладить, в кронтабе запускать уже скрипт.&lt;br&gt;&amp;gt; Так тоже работает. Мой вопрос, как и какие символы правильно экранировать, чтобы &lt;br&gt;&amp;gt; это работало и из кронтаба.&lt;br&gt;&lt;br&gt;$whoami&lt;br&gt;$echo $PATH&lt;br&gt;$su&lt;br&gt;..&lt;br&gt;#echo $PATH&lt;br&gt;&lt;br&gt;указать полные пути к командам.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>crontab и правильное экранирование (mr_tee)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#8</link>
    <pubDate>Wed, 07 Nov 2012 05:43:51 GMT</pubDate>
    <description>&amp;gt; Написать скрипт, отладить, в кронтабе запускать уже скрипт.&lt;br&gt;&lt;br&gt;Так тоже работает. Мой вопрос, как и какие символы правильно экранировать, чтобы это работало и из кронтаба.&lt;br&gt;</description>
</item>

<item>
    <title>crontab и правильное экранирование (mr_tee)</title>
    <link>https://ssl.opennet.dev/openforum/vsluhforumID9/9572.html#7</link>
    <pubDate>Wed, 07 Nov 2012 05:41:31 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Написать скрипт, отладить, в кронтабе запускать уже скрипт.&lt;br&gt;&amp;gt; Суть в том, что в командной строке у Вас скорее всего bash, &lt;br&gt;&amp;gt; а crontab, судя по логам ошибки, использует /bin/sh &lt;br&gt;&lt;br&gt;Вы правы, поэтому для отладки я запускаю так:&lt;br&gt;/bin/sh -c &quot;cd /mnt/sdb/report; ls -1 &amp;#124; sed &apos;/tbz2/d; /$(date --date=6&#092; months&#092; ago +&#037;Y&#037;m)/,&#092;$d&apos; &amp;#124; xargs -n 1 -I &#123;&#125; echo tar cjpf &#123;&#125;.tbz2 &#123;&#125;&quot;&lt;br&gt;&lt;br&gt;И получаю такой вывод:&lt;br&gt;tar cjpf 20120401.tbz2 20120401&lt;br&gt;tar cjpf 20120402.tbz2 20120402&lt;br&gt;...&lt;br&gt;tar cjpf 20120430.tbz2 20120430&lt;br&gt;&lt;br&gt;То есть все работает как надо.&lt;br&gt;</description>
</item>

</channel>
</rss>
