наблюдается «несоответствие» переменных окружения, по порядку
по идее, переменные оеружения (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