powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / sh script (command line vs crontab)
43 сообщений из 43, показаны все 2 страниц
sh script (command line vs crontab)
    #39595742
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть sh скрипт ( mgbc.sh ), запускающий SQL-скрипт и выводящий результат в файл result_mgbc.txt

Код: powershell
1.
2.
3.
#!/bin/sh

(echo "SET @cid=570; SET @cid2='service@';" ; cat /root/bin/mgbc.sql) |mysql -uusername -pservetword  > /root/bin/result_mgbc.txt 



SQL-скрипт для выборки из MySQL таблицы

Код: sql
1.
2.
3.
4.
5.
6.
SELECT  table1.id, table1.a_id, table2.email
FROM table1
INNER JOIN table2 ON table1.a_id=table2.id
AND table1.campaign_id = @cid
AND table2.email LIKE CONCAT('%', @cid2 ,'%')
; 




Запуская /root/bin/mgbc.sh из терминала,
в файле result_mgbc.txt имеем данные по выборке

А запуская тот же /root/bin/mgbc.sh из КРОНа


35 10 1 * * /root/bin/mgbc.sh


в файле result_mgbc.txt пусто

Где собака порылась?
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39595782
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justITГде собака порылась?в путях? либо скорми крону пути вида PATH=/usr/... , либо укажи c явным путем mysql.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39595814
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyjustITГде собака порылась?
в путях? либо скорми крону пути вида PATH=/usr/... , либо укажи c явным путем mysql.


Увы

Код: powershell
1.
2.
3.
#!/bin/sh

(echo "SET @cid=570; SET @cid2='service@';" ; cat /root/bin/mgbc.sql) | /usr/bin/mysql -uusername -pservetword  > /root/bin/result_mgbc.txt 



результат тот же.
Командная строка - отработал
Из крона результат селекта ноль.
Именно что в result_mgbc.txt

Код: plsql
1.
2.
campaign_recipient.id campaign_recipient.account_id account.marketing_contact_email
0



sql-скрипт отрабатывает, но вместо @cid=570 и @cid2='service@' в него идет что-то иное, пустое.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39595842
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justITА запуская тот же /root/bin/mgbc.sh из КРОНа


35 10 1 * * /root/bin/mgbc.sh


в файле result_mgbc.txt пусто

Где собака порылась?
В crontab-е. Под каким юзером скрипт запускается?
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39595866
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcjustITА запуская тот же /root/bin/mgbc.sh из КРОНа


35 10 1 * * /root/bin/mgbc.sh


в файле result_mgbc.txt пусто

Где собака порылась?
В crontab-е. Под каким юзером скрипт запускается?

логинюсь под root
запускаю скрипт стало быть тоже.
crontab -e из той же сессии.

Скрипт-то запускается, и отрабатывает (крон-лог)
текстовый файл-с-отчетом-создается.
В нем список полей из селекта есть, только данных нету,
точно будто вместо параметра 570 идет нуль.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39595928
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, в запросе кодировку SET NAMES указать явно? При консольном вызове mysql она берется из переменных окружения. Гипотетически, в сессии крона она может отличаться от пользовательской сессии. Хотя, если кириллицы нет, то и повлиять оно не должно.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596030
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кириллицы нет в таблицах вообще.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596108
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется если SET @cid=...; SET @cid2=... вставить непосредственно в sql-script то все раотает как часы.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596310
Мутаген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это же легко проверить.
Код: powershell
1.
2.
#!/bin/sh
(echo "SET @cid=570; SET @cid2='service@';" ; cat /root/bin/mgbc.sql) > /tmp/tmp.txt


и посмотреть чего будет в /tmp/tmp.txt

Плюс обычные средства отладки cron: посмотреть чего он в email напишет.

Я подозреваю /bin/sh это какой-то облегченный шелл и не понимает таких новшеств со скобками. Типа ash/dash или вообще какой-нибудь HP-UX, у которого /bin/sh неизменный с 80х.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596356
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МутагенЭто же легко проверить.
Код: powershell
1.
2.
#!/bin/sh
(echo "SET @cid=570; SET @cid2='service@';" ; cat /root/bin/mgbc.sql) > /tmp/tmp.txt


и посмотреть чего будет в /tmp/tmp.txt


в /tmp/tmp.txt имеем

При запуске вручную

Код: powershell
1.
2.
3.
SET @cid=570; SET @cid2='service@';

+ содержимое /root/bin/mgbc.sql



При запуске через cron ничего.
Хм....

В cron-логе видно, что скрипт запустился.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596366
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МутагенЭто же легко проверить.


НО!

При выполнении вручную

Код: powershell
1.
2.
3.
#!/bin/sh

(echo "SET @cid=570; SET @cid2='service@';" ; cat /root/bin/mgbc.sql) |/full-path-to/mysql -uusername -pservetword  > /root/bin/result_mgbc.txt



В /root/bin/result_mgbc.txt
имеем

Код: powershell
1.
2.
3.
table1.id, table1.a_id, table2.email
1245       4578    service@somedomain.com
и еще 500+ таких строк  



Удаляю /root/bin/result_mgbc.txt и
запускаю через крон

В /root/bin/result_mgbc.txt
имеем

Код: powershell
1.
2.
3.
table1.id, table1.a_id, table2.email
и больше ничего!! 
списот полей таблицы, но нет данных



Что говорит о том, что оба скрипта обрабатывают, только вместо
SET @cid=570; SET @cid2='service@';
передаются скорей всего пустые cid и cid2



Суть задачи-то в том, чтобы сделать шелл скрипт, который в кроне потом запускать несколько раз в сутки
вот так:

Код: powershell
1.
2.
3.
4.
15 8 * * * /root/bin/mgbc.sh 570 'service@'
15 9 * * * /root/bin/mgbc.sh 571 'service@'
15 10 * * * /root/bin/mgbc.sh 572 'service@'
15 11 * * * /root/bin/mgbc.sh 573 'service@'



Я пока не смог найти иного метода, кроме как указанный выше.

Буду благодарен, если натолкнете на альнернативную идею.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596377
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сходу такие мысли.

1. Попробовать bash вместо sh. Всё же, разные они сильно.
2. Попробовать заэкранировать @. Не уверен, что поможет, вроде не спецсимвол.
3. Тупо написать несколько файликов, по одному на каждый вид запуска и читать их через cat. Ну это уж совсем тупо :-)
4. Непосредственно в тексте запроса присваивать значения переменным в соответствии с временем запуска (если есть какая-то строгая зависимость значения от времени). Если вариантов значений много - разместить их в дополнительную табличку и читать в переменные через SELECT...INTO. Время можно вычислить функциями MySQL.
5. Перенести код в хранимую процедуру и вызывать её с параметрами (строковые значения). Мне этот вариант больше всего нравится.
6. Перейти на встроенный планировщик MySQL, если это возможно (у него более скудные возможности по расписанию), и перенести туда весь код.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596936
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crond не устанавливает никаких переменных
запускать из скрипта с установкой всех необходимых env
я тестирую сбросом всех переменных:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
# новых экземпляр shell чтобы можно было дальше работать после теста
$ unset `set `set | cut -f1 -d=`

# set PS1 и PATH
PS=\$\ 
$ PATH=/bin:/usr/bin

# scipt testing
$ /path/script
...

# возврат в нормальное окружение
$ exit
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596949
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justIT
Код: powershell
1.
#!/bin/sh



чет странно что никто до сих пор для отладки не посоветовал
Код: sql
1.
#!/bin/sh -x
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39596984
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnincrond не устанавливает никаких переменных
запускать из скрипта с установкой всех необходимых env
я тестирую сбросом всех переменных:


к сожалению не понял Вас.
Какие ему нужны переменные, если все пути указаны полностью?

Как я уже писал выше 99% трабла в том, что при выполнении из Крона
мои @cid and @cid2 не считываются,
а вместо них идет "пустота",
и, соответственно select выполняется но ничего не выводит.

Кстати та же байда, если я выношу @cid наружу
То есть запускаю как
Код: powershell
1.
mysh.sh 570



А в скрипте
Код: powershell
1.
(echo "SET @cid = $1..... и так далее"



crontab не понимает конструкцию echo "SET.....



Андрей Панфиловчет странно что никто до сих пор для отладки не посоветовал

Код: sql
1.
2.
3.
4.
5.
6.
set -x

#body of my sh script
(echo "SET @cid = 570.....

set +x

[/quot]

в терминале вижу все, но если из крона задача пойдет, где debug output увидеть смогу?
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597050
Мутаген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnincrond не устанавливает никаких переменныхЭто тут не при чём.
Vadim Lejninя тестирую сбросом всех переменных:
Код: sql
1.
2.
# новых экземпляр shell чтобы можно было дальше работать после теста
$ unset `set `set | cut -f1 -d=`


проще командой
Код: plaintext
env -i
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597394
ncux199rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так может сами переменные взять в кавычки?
Код: sql
1.
"SET '@cid'=570; SET '@cid2'='service@';"
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597407
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justITА в скрипте
Код: powershell
1.
(echo "SET @cid = $1..... и так далее"



crontab не понимает конструкцию echo "SET.....
А /bin/echo ?
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597557
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnincrond не устанавливает никаких переменных
поэтому лучше просто подгрузить profile рута в начале скрипта....
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597681
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровjustITА в скрипте
Код: powershell
1.
(echo "SET @cid = $1..... и так далее"



crontab не понимает конструкцию echo "SET.....
А /bin/echo ?

не помогло.

В файле имена полей и полное отсутствие данных


Q.TarantinoVadim Lejnincrond не устанавливает никаких переменных
поэтому лучше просто подгрузить profile рута в начале скрипта....

Все манипуляции под рутом делаются.
как и ручное вполнение скрипта, так и редактирование кронтаба (cron -e)
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597686
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Склоняюсь к мысли, что это просто невозможно сделать.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597746
неТолик1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
justIT,

попробуй так запустить из крона
Код: coco
1.
35 10 1 * * source /root/bin/mgbc.sh
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597983
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justITСклоняюсь к мысли, что это просто невозможно сделать.
А кто вам не дает написать полностью скрипт, в котором вы сначала сформируете нужный вам файл с командами sql и отправить его на обработку...
В конечном счете можно попробовать создать задание для самого root'а... crontab -e -u root
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39597989
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justITВсе манипуляции под рутом делаются.
как и ручное вполнение скрипта, так и редактирование кронтаба (cron -e)
justITСклоняюсь к мысли, что это просто невозможно сделать.
склоняюсь к мысли что ты тупой.
тебе вроде сказали - крон не подгружает профайл рута!
руками его подгрузи в скрипте!
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39598145
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть подозрение, что просто к нам, на форум друзей, вываливаются недостоверные данные
Типо, это не имеет значения, но там символ %, но это же не важно
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39598274
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЕсть подозрение, что просто к нам, на форум друзей, вываливаются недостоверные данные
Типо, это не имеет значения, но там символ %, но это же не важно

Не понял Вас.
Данные же достоверные :-)

Но попробовал упростить задачу,
а именно СКЛ скрипт сделал без LIKE

Код: sql
1.
2.
3.
4.
5.
SELECT  table1.id, table1.a_id, table2.email
FROM table1
INNER JOIN table2 ON table1.a_id=table2.id
AND table1.campaign_id = @cid
; 



и КРОН выполнил его!
М-да.
Спасибо за наводку.
Осталось раскурить, как и где '%' влияет

Q.Tarantinoсклоняюсь к мысли что ты тупой.
тебе вроде сказали - крон не подгружает профайл рута!
руками его подгрузи в скрипте!

Да я не претендую на звание гения,
но советы давать можно если в теме :-)
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39598315
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justITОсталось раскурить, как и где '%' влияет
Как-то не очень понятно, в приведенном листинге ни разу такого символа не было
Но "если что" символ "%" действительно имеет интересное значение и об этом написано в man crontab
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39598322
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровjustITОсталось раскурить, как и где '%' влияет
Как-то не очень понятно, в приведенном листинге ни разу такого символа не было

в стартовом посте есть он :-)


Вячеслав ЛюбомудровНо "если что" символ "%" действительно имеет интересное значение и об этом написано в man crontab

Спасибо, буду знать
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39599205
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз спасибо Вячеславу Любомудрову за наводку.

Итого рабочий вариант

Код: powershell
1.
2.
3.
#!/bin/sh

(/bin/echo "SET @cid=570; SET @cid2='something@';" ; cat /root/bin/mgbc.sql) | /usr/bin/mysql -uusername -pservetword  > /root/bin/result_mgbc.txt 



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SET @percent := '%' ;

SELECT  table1.id, table1.a_id, table2.email
FROM table1
INNER JOIN table2 ON table1.a_id=table2.id
AND table1.campaign_id = @cid
AND table2.email LIKE CONCAT(@percent, @cid2 , @percent)
; 



Вот фишка SET @percent := '%' ;
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39599287
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у MySQL нет оператора containing? коль его поведение ты эмулируешь через лайк... просто я не силен в mysql.

Да, и для того же файрберда я скармливаю скрипт как параметр командной строки, а не через cat+трубопроводы. При таком раскладе крон не будет участвовать никоим боком в парсинге sql скрипта. Тут нельзя так сделать?
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39599341
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskyу MySQL нет оператора containing? коль его поведение ты эмулируешь через лайк... просто я не силен в mysql.


Я так же не силен в mysql, но не нашел containing.

Кстати тут же нарисовалась следующая "проблема"


Код: powershell
1.
15 8 * * * /root/bin/mgbc.sh 570


отрабатывает на ура,
но вот в случае использования второго параметра

Код: powershell
1.
2.
3.
15 8 * * * /root/bin/mgbc.sh 570 'something@'

15 8 * * * /root/bin/mgbc.sh 570 'something'



он, параметр подставляться в СКЛ-выражение

Код: sql
1.
2.
3.
4.
SELECT  ......
......
AND table2.email LIKE CONCAT(@percent, @cid2 , @percent)
;



"не желает"

возможно изврат с присвоением paramener2 значения 'something@' из командной строки
Код: sql
1.
2.
3.
4.
5.
SET @paramener2 := @cid2 ;
SELECT  ......
......
AND table2.email LIKE CONCAT(@percent, @paramener2 , @percent)
;



сработает.
Попробую, хотя на вид "дичь"
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39599459
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то ты что-то недоговариваешь
% имеет значение только в файле crontab
Если же он находится в скрипте, который вызывается из crontab, то никакого влияния не оказывает
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39599881
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровВообще-то ты что-то недоговариваешь

Ну не знаю. Все изложил как есть.
В принципе вроде и не сложно воспроизвести ситуацию на любой никс машине.

Вячеслав Любомудров% имеет значение только в файле crontab

Собственно именно поэтому я сперва удивился Вашей наводке.
ведь в самом кронтабе и в помине нет %-в

Вячеслав ЛюбомудровЕсли же он находится в скрипте, который вызывается из crontab, то никакого влияния не оказывает

Ну вот опыт показал что таки влияет.
Почему?
Да понятия не имею, но опытным путем выяснилось, что %- и мешал.
Как видно из одного из примеров, что выше - убрав из селекта like условие - скрипт работал себе на ура.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39599901
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justITНу вот опыт показал что таки влияет.По сути, процентик переехал из одной строчки читаемого файла в другую строчку того же файла. Как он читался и передавался в пайп - так читается и передается. В этом смысле механизм влияния расположения процентика внутри файла на работоспособность системы в целом совсем не понятен.

justITПочему?
Да понятия не имею,Ну, может быть, кто-то сможет объяснить... :)
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39599938
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleВ этом смысле механизм влияния расположения процентика внутри файла на работоспособность системы в целом совсем не понятен.

+500
И нечего сказать.
Разве что то я сделал еще какую-то ошибку, которую по прежнему не вижу.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39600023
Q.Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЕсли же он находится в скрипте, который вызывается из crontab, то никакого влияния не оказывает
+100500
justITРазве что то я сделал еще какую-то ошибку, которую по прежнему не вижу.
вполне возможно. когда за раз вносишь не одно изменение а парочку сразу (прочел пару советов и оба применил) - потом сложно сказать что именно сработало :)
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39600056
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Q.TarantinoВячеслав ЛюбомудровЕсли же он находится в скрипте, который вызывается из crontab, то никакого влияния не оказывает
+100500

Ну не знаю

Итак, для чистоты эксперимента

Скрипт
/root/bin/m01.sh


Код: powershell
1.
2.
3.
4.
5.
6.
7.
#!/bin/bash

### Usage scriptname.sh 570 "'something@'" 
###
(/bin/echo "SET @cid := $1; SET @cid2 := $2; " ; cat /root/bin/m01.sql) | /usr/bin/mysql -uusername -ppassword database_name > /root/bin/result_mgbc.txt

(/bin/echo "SET @cid := $1; SET @cid2 := $2; " ; cat /root/bin/m01.sql)  > /root/bin/result_mgbc_1.txt




SQL-скрипт

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(table01.id) AS initial_contacts_cid2
FROM table01
INNER JOIN table02 ON table01.account_id=account.id
AND table01.campaign_id = @cid
--  remove percentage sign  AND table02.contact_email LIKE CONCAT ('%', @cid2, '%')
;





запускаем вручную
Код: powershell
1.
/root/bin/m01.sh 575 "'admin@'"




Содержимое
/root/bin/result_mgbc.txt
Код: sql
1.
2.
3.
4.
@cid2
admin@
initial_contacts_cid2
15685



Содержимое
/root/bin/result_mgbc_1.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @cid := 575; SET @cid2 := 'admin@';
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
--  remove percentage sign  AND account.marketing_contact_email LIKE CONCAT ('%', @cid2, '%')
;



удаляем
/root/bin/result_mgbc_1.txt
и
/root/bin/result_mgbc.txt



запускаем crontab
Код: powershell
1.
30 16 10 * * /root/bin/m01.sh 575 "'admin@'"



Содержимое
/root/bin/result_mgbc.txt
и
/root/bin/result_mgbc_1.txt


то же, что и выше.
то есть скрипты отработали и выдали одинаковый результат


удаляем
/root/bin/result_mgbc_1.txt
и
/root/bin/result_mgbc.txt



изменяем SQL-скрипт, чтобы условие LIKE выполнялось

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(table01.id) AS initial_contacts_cid2
FROM table01
INNER JOIN table02 ON table01.account_id=account.id
AND table01.campaign_id = @cid
AND table02.contact_email LIKE CONCAT ('%', @cid2, '%')
;




запускаем вручную
Код: powershell
1.
/root/bin/m01.sh 575 "'admin@'"



Содержимое
/root/bin/result_mgbc.txt
Код: sql
1.
2.
3.
4.
@cid2
admin@
initial_contacts_cid2
15685



Содержимое
/root/bin/result_mgbc_1.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @cid := 575; SET @cid2 := 'admin@';
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT ('%', @cid2, '%')
;



удаляем
/root/bin/result_mgbc_1.txt
и
/root/bin/result_mgbc.txt


запускаем crontab
Код: powershell
1.
45 16 10 * * /root/bin/m01.sh 575 "'admin@'"



Содержимое
/root/bin/result_mgbc.txt
Код: sql
1.
2.
3.
4.
@cid2
admin@
initial_contacts_cid2
0



НОЛЬ Карл!!!!


Содержимое
/root/bin/result_mgbc_1.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @cid := 575; SET @cid2 := 'admin@';
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT ('%', @cid2, '%')
;




удаляем
/root/bin/result_mgbc_1.txt
и
/root/bin/result_mgbc.txt



изменяем SQL-скрипт (знак процента в СКЛ выражении импользем через @percent)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT (@percent, @cid2, @percent)
;



Вручную и не запускаю, ибо и так понятно (?)

запускаем crontab
Код: powershell
1.
50 16 10 * * /root/bin/m01.sh 575 "'admin@'"




Содержимое
/root/bin/result_mgbc.txt
Код: sql
1.
2.
3.
4.
@cid2
admin@
initial_contacts_cid2
15685



15685 !!!


Содержимое
/root/bin/result_mgbc_1.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @cid := 575; SET @cid2 := 'admin@';
SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT (@percent, @cid2, @percent)
;



Ну как?
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39600058
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон.
Предыдущее сообжщение с ошибками.
Разумеется, что при добавочном LIKE условии количество уменьшилось.


Скрипт
/root/bin/m01.sh


Код: powershell
1.
2.
3.
4.
5.
6.
7.
#!/bin/bash

### Usage scriptname.sh 570 "'something@'" 
###
(/bin/echo "SET @cid := $1; SET @cid2 := $2; " ; cat /root/bin/m01.sql) | /usr/bin/mysql -uusername -ppassword database_name > /root/bin/result_mgbc.txt

(/bin/echo "SET @cid := $1; SET @cid2 := $2; " ; cat /root/bin/m01.sql)  > /root/bin/result_mgbc_1.txt




SQL-скрипт

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(table01.id) AS initial_contacts_cid2
FROM table01
INNER JOIN table02 ON table01.account_id=account.id
AND table01.campaign_id = @cid
--  remove percentage sign  AND table02.contact_email LIKE CONCAT ('%', @cid2, '%')
;





запускаем вручную
Код: powershell
1.
/root/bin/m01.sh 575 "'admin@'"




Содержимое
/root/bin/result_mgbc.txt
Код: sql
1.
2.
3.
4.
@cid2
admin@
initial_contacts_cid2
15685



Содержимое
/root/bin/result_mgbc_1.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @cid := 575; SET @cid2 := 'admin@';
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
--  remove percentage sign  AND account.marketing_contact_email LIKE CONCAT ('%', @cid2, '%')
;



удаляем
/root/bin/result_mgbc_1.txt
и
/root/bin/result_mgbc.txt



запускаем crontab
Код: powershell
1.
30 16 10 * * /root/bin/m01.sh 575 "'admin@'"



Содержимое
/root/bin/result_mgbc.txt
и
/root/bin/result_mgbc_1.txt


то же, что и выше.
то есть скрипты отработали и выдали одинаковый результат


удаляем
/root/bin/result_mgbc_1.txt
и
/root/bin/result_mgbc.txt



изменяем SQL-скрипт, чтобы условие LIKE выполнялось

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(table01.id) AS initial_contacts_cid2
FROM table01
INNER JOIN table02 ON table01.account_id=account.id
AND table01.campaign_id = @cid
AND table02.contact_email LIKE CONCAT ('%', @cid2, '%')
;




запускаем вручную
Код: powershell
1.
/root/bin/m01.sh 575 "'admin@'"



Содержимое
/root/bin/result_mgbc.txt
Код: sql
1.
2.
3.
4.
@cid2
admin@
initial_contacts_cid2
19



Содержимое
/root/bin/result_mgbc_1.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @cid := 575; SET @cid2 := 'admin@';
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT ('%', @cid2, '%')
;



удаляем
/root/bin/result_mgbc_1.txt
и
/root/bin/result_mgbc.txt


запускаем crontab
Код: powershell
1.
45 16 10 * * /root/bin/m01.sh 575 "'admin@'"



Содержимое
/root/bin/result_mgbc.txt
Код: sql
1.
2.
3.
4.
@cid2
admin@
initial_contacts_cid2
0



НОЛЬ Карл!!!!


Содержимое
/root/bin/result_mgbc_1.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @cid := 575; SET @cid2 := 'admin@';
#SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT ('%', @cid2, '%')
;




удаляем
/root/bin/result_mgbc_1.txt
и
/root/bin/result_mgbc.txt



изменяем SQL-скрипт (знак процента в СКЛ выражении импользем через @percent)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT (@percent, @cid2, @percent)
;



Вручную и не запускаю, ибо и так понятно (?)

запускаем crontab
Код: powershell
1.
50 16 10 * * /root/bin/m01.sh 575 "'admin@'"




Содержимое
/root/bin/result_mgbc.txt
Код: sql
1.
2.
3.
4.
@cid2
admin@
initial_contacts_cid2
19



19 !!!


Содержимое
/root/bin/result_mgbc_1.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET @cid := 575; SET @cid2 := 'admin@';
SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT (@percent, @cid2, @percent)
;



Ну как?[/quot]
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39600069
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шайтан, однако!

Когда COUNT() возвращает ноль - значит, под условие выборки не попало ни одной записи. Потому выходит, что после конкатенации @cid2 с процентами в результате получается значение, под которое не попадает ни одна запись (может быть так же пустая строка или NULL). Притом, пропадает из конкатенации именно процентик, а не @cid2 (под условие LIKE '%%' попадают все записи, под LIKE 'admin@' может ни одной не попасть).

Было б любопытно взглянуть на
Код: sql
1.
SELECT CONCAT ('%', @cid2, '%');

в проблемном варианте вызова. Или, может, проще, SELECT CONCAT ('%%'); или SELECT CONCAT ('%');

На своем компе попробовал набросать тест - увы, бага не воспроизводится. Наверняка, имеют значение версии ПО и ещё какие-то настройки.
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39600081
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleШайтан, однако!

Когда COUNT() возвращает ноль - значит, под условие выборки не попало ни одной записи. Потому выходит, что после конкатенации @cid2 с процентами в результате получается значение, под которое не попадает ни одна запись (может быть так же пустая строка или NULL). Притом, пропадает из конкатенации именно процентик, а не @cid2 (под условие LIKE '%%' попадают все записи, под LIKE 'admin@' может ни одной не попасть).

Было б любопытно взглянуть на
Код: sql
1.
SELECT CONCAT ('%', @cid2, '%');

в проблемном варианте вызова. Или, может, проще, SELECT CONCAT ('%%'); или SELECT CONCAT ('%');

На своем компе попробовал набросать тест - увы, бага не воспроизводится. Наверняка, имеют значение версии ПО и ещё какие-то настройки.


как-то так?

Запуск Вручную
/root/bin/m01.sh 575 "'admin@'"

Результат
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@cid2
admin@
initial_marketing_contacts_cid2
19
the percentage sign
the percentage sign
CONCAT ('%', @cid2, '%')
%admin@%
the percentage sign as parameter
the percentage sign as parameter
CONCAT (@percent, @cid2, @percent)
%admin@%



Вроде отработал запрос верно, хотя я ожидал
вместо %admin@% увидеть ' %admin@% '

Из крона - результат тот же.

Сам СКЛ в обоих случаях

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SET @cid := 575; SET @cid2 := 'admin@';
SET @percent := '%';

SELECT @cid2 ;

SELECT count(campaign_recipient.id) AS initial_marketing_contacts_cid2
FROM campaign_recipient
INNER JOIN account ON campaign_recipient.account_id=account.id
AND campaign_recipient.campaign_id = @cid
AND account.marketing_contact_email LIKE CONCAT (@percent, @cid2, @percent)
;

SELECT 'the percentage sign' ;

SELECT CONCAT ('%', @cid2, '%') ;

SELECT 'the percentage sign as parameter' ;

SELECT CONCAT (@percent, @cid2, @percent) ;
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39600160
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justITя ожидал
вместо %admin@% увидеть ' %admin@% ' Да это нормально, мускуль на выходе не обрамляет текст кавычками. На входе - да, требует кавычки.
justITИз крона - результат тот же.Выходит, выражение для LIKE подготавливается верно, процентики не пропали. Может, collation каким-то боком, но Вы же говорите, там нет не-латиницы... Мда, последняя надежда найти заковыку рухнула...
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39607920
fandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justIT
<...>
Суть задачи-то в том, чтобы сделать шелл скрипт, который в кроне потом запускать несколько раз в сутки
вот так:

Код: powershell
1.
2.
3.
4.
15 8 * * * /root/bin/mgbc.sh 570 'service@'
15 9 * * * /root/bin/mgbc.sh 571 'service@'
15 10 * * * /root/bin/mgbc.sh 572 'service@'
15 11 * * * /root/bin/mgbc.sh 573 'service@'



Я пока не смог найти иного метода, кроме как указанный выше.

Буду благодарен, если натолкнете на альнернативную идею.


есть такая альтернатива:
Код: powershell
1.
2.
3.
4.
15 8 * * * /bin/sh -c "/root/bin/mgbc.sh 570 'service@' > /dev/null 2>&1" 
15 9 * * * /bin/sh -c "/root/bin/mgbc.sh 571 'service@' > /dev/null 2>&1"
15 10 * * * /bin/sh -c "/root/bin/mgbc.sh 572 'service@' > /dev/null 2>&1"
15 11 * * * /bin/sh -c "/root/bin/mgbc.sh 573 'service@' > /dev/null 2>&1"



или
(если совсем не поможет)
Код: powershell
1.
2.
3.
4.
15 8 * * * /bin/sh -c "/root/bin/mgbc570service.sh > /dev/null 2>&1" 
15 9 * * * /bin/sh -c "/root/bin/mgbc571service.sh  > /dev/null 2>&1"
15 10 * * * /bin/sh -c "/root/bin/mgbc572service.sh  > /dev/null 2>&1"
15 11 * * * /bin/sh -c "/root/bin/mgbc573service.sh  > /dev/null 2>&1"




и правильно собственное творчество сваливать куда-то, типа
/usr/local/bin
...
Рейтинг: 0 / 0
sh script (command line vs crontab)
    #39608322
justIT,

Основная причина в том, что у сессии пользователя, запущенной из крона может быть не такое окружение как в обычной консоли, проверить это можно командой env, запущенной из крона и из консоли. Тут же можно погуглить про .bashrc и bash_profile. Кроме того, в модных дистрах может быть включен selinux, который блокирует доступ приложения в непредсказуемых с непривычки местах, правда этот вариант маловероятен.
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / sh script (command line vs crontab)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]