глюки крона в slackware (наблюдается "несоответствие" переменных окружения)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
sunjob
Сообщения: 524

глюки крона в slackware

Сообщение sunjob »

по идее, переменные оеружения (PATH,SHELL,TERM,MAILTO,HOME etc...) должны определятся в след. порядке:
- из окружения пользователя
- из окружения крона пользователя (если определены в кроне)
- из окружения запущенного скрипта (если определены в скрипте)

во всяком случае при настройке крона в дебиане я не замечал какого либо "неудобства" или "несоответствия данным правилам"
данные правила "не где то вычитанные - а эмпирически выстраданные" :о)

в слакваре постоянно натыкаюсь на грабли

для отладки данной задачи - из крона запускаю скрипт "cron_test.sh", который выводит переменные в файл "cron_test.log"

ниже рассмотрены 3и случая и соотв. содержимое лог-файла

Код:

// крон - переменные закоментированы // скрипт - переменные закоментированы SHELL = /bin/sh PATH = /root/bin:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin TERM = xterm MAILTO =. HOME = /home/usr


Код:

// крон - переменные разкоментированы // скрипт - переменные закоментированы SHELL = /bin/sh PATH = /root/bin:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin TERM = xterm MAILTO =. HOME = /home/usr


Код:

// крон - разкоментированы // скрипт - разкоментированы SHELL = /bash_user PATH = /PATH_USER TERM = term_user MAILTO = mailto_user HOME = /home_user


итого :

первые два случая - "идентичные результаты" (косячные)
третий случай - "самый правильный"

если переменные не определены ни в кроне ни в скрипте:
PATH - root-овый

если переменные определены в кроне:
переменные вообще не соот. определенным в кроне:

если переменные опеделены в скрипте:
переменные "правильные"

т.е. "самый главные" - первые два случаю - косячные
(натыкался на это постоянно, когда хотел в крон-файле использовать команду_имя_скрипта, без полного пути, расчитывая на адекватное определение PATH)

проверено
- Sklackware 12.2 / 14.1 (глюки присутствуют)
- Debian 5.0.10 / 7.0.5 (правильное поведение)

выслушаю комментарии, можно ссылки, мысли, кто как с этим борется
спасибо

...

содержимое файлов (крон и скрипт)

Код:

// // /var/spool/cron/crontabs/usr // PATH=/PATH_CRON SHELL=/bash_cron TERM=term_cron MAILTO=mailto_cron HOME=/home_cron <далее идут команды крона>



Код:

// // cron_test.sh // #!/bin/sh PATH=/PATH_USER SHELL=/bash_user TERM=term_user MAILTO=mailto_user HOME=/home_user LOG=/home/usr/var/log/cron_test.log echo " SHELL = ${SHELL} PATH = ${PATH} TERM = ${TERM} MAILTO = ${MAILTO} HOME = ${HOME} " >> $LOG
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: глюки крона в slackware

Сообщение bormant »

sunjob писал(а):
22.11.2014 19:36
данные правила "не где то вычитанные - а эмпирически выстраданные" :о)
в слакваре постоянно натыкаюсь на грабли

В Slackware в комплекте dcron, man crond и man crontab и /usr/doc/dcron-*/ наверняка стоит почитать.

Как минимум, README:
Unlike other fatter cron daemons, though, this cron doesn't even try to manage environment variables or act as a shell. All jobs are run with `/bin/sh` for conformity and portability. We don't try to use the user's preferred shell: that breaks down for special users and even makes some of us normal users unhappy (for example, /bin/csh does not use a true O_APPEND mode and has difficulty redirecting stdout and stderr both to different places!). You can, of course, run shell scripts in whatever language you like by making them executable with #!/bin/csh or whatever as the first line. If you don't like the extra processes, just `exec` them.

If you need to set special environment variables, pass them as arguments to a script.
и man crontab:
Nor does it do any special environment handling. A shell script is better-suited to doing that than a cron daemon. This cron daemon sets up only four environment variables: USER, LOGNAME, HOME, and SHELL.
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 524

Re: глюки крона в slackware

Сообщение sunjob »

согласно ману крон устанавливает 4е переменные окружения

Код: Выделить всё

 USER, LOGNAME, HOME, and SHELL


на деле они берутся из пользовательского окружения
(в топике рассмотены только две из них, но и при детальном рассмотрении видно что они так же - берутся из пользовательского окружения и не из крона)

по сути, вообще ни одна переменная не устанавливается кроном,
переопределить переменные окружения можно ТОЛЬКО В СКРИПТЕ

проверить это можно так же добавить в кронтаб и скрипт эти переменные (что и было сделано) - и провести "тестовый замер"

...

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

...

по поводу

Код: Выделить всё

во всяком случае при настройке крона в дебиане я не замечал какого либо "неудобства" или "несоответствия данным правилам"
данные правила "не где то вычитанные - а эмпирически выстраданные" :о)


дебиан был указан как самый распространенный и естественно пользуемый (настраиваемый) в своем кругу
а правило поведение - обычное UNIX поведение крона, проверено на большом количестве дистрибьютивов, наверное более 15, и в частности, за последнее время проверено на след. настраиваемых системах:

Код: Выделить всё

linux-mint-16
altlinux-6.0.0
kali-linux 1.0.1
open suse 12.3
pclinux-2011.08
ubuntu-10.04
fedore-19


и ни где не было какого либо отклонения от правила, поэтому у меня не было даже намека на мысль что в !!! СЛАКЕ !!! будет сделано как то иначе (уж где-где, но не в слаке)

...

итого:
- глюк еще раз подтвердился
- если я что то неправильно понимаю, поправьте

спасибо
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: глюки крона в slackware

Сообщение KiWi »

sunjob писал(а):
23.11.2014 12:20
- глюк еще раз подтвердился

Ещё раз: это не глюк, это то, как работает dcron -- он не умеет envrionment variables внутри crontabа. Так что первые два случая и не должны ничем отличаться.
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 524

Re: глюки крона в slackware

Сообщение sunjob »

Код: Выделить всё

This cron daemon sets up only four environment variables: USER, LOGNAME, HOME, and SHELL.

как будет переведена эта часть мана? возможно я не правильно понял смысл

этот демон крона устанавливает только 4 переменные окружения: (и далее по тексту)

именно set up а не pass through или penetrate

я у себя наблюдаю отсутствие "set up"-а этих переменных

+

PATH - берется root-овский а не пользовательский (и с чего бы это? крон то пользовательский!!!)
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21488
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: глюки крона в slackware

Сообщение Bizdelnick »

sunjob
От нас-то чего хотите? Сочувствия и понимания?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 524

Re: глюки крона в slackware

Сообщение sunjob »

Bizdelnick писал(а):
26.11.2014 22:17
>> выслушаю комментарии, можно ссылки, мысли, кто как с этим борется
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21488
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: глюки крона в slackware

Сообщение Bizdelnick »

Запихивайте все нужные переменные в скрипт.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: глюки крона в slackware

Сообщение KiWi »

sunjob писал(а):
26.11.2014 20:58
этот демон крона устанавливает только 4 переменные окружения: (и далее по тексту)

Иии? Устанавливает. Так, как ему захочется.
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 524

Re: глюки крона в slackware

Сообщение sunjob »

>> как ему захочется

PATH - берет из окружения root-а и вставляет в окружение пользовательского крона
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21488
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: глюки крона в slackware

Сообщение Bizdelnick »

sunjob писал(а):
28.11.2014 03:07
PATH - берет из окружения root-а и вставляет в окружение пользовательского крона

"Пользовательского крона" как отдельного процесса не существует. Как ему прикажете угадывать это пользовательский PATH, запускать login shell? Так переносимого способа это сделать вроде нет (поправьте, если ошибаюсь). Можно наворотить для этого искусственный интеллект, но в задачи dcron такое не входит. См. приведённую выше цитату из README, и вообще весь README. Не нравится такое поведение - ставьте vixie cron или ещё какой-нибудь, никто не запрещает.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sunjob
Сообщения: 524

Re: глюки крона в slackware

Сообщение sunjob »

тема исчерпана, спасибо!
если я ошибаюсь, то поправьте а не критикуйте :о)
Спасибо сказали: