LINUX.ORG.RU

Эмулирование среды Cron. Чего еще не хватает?


0

1

Навеяно этой темой: Как отладить выполнение скрипта в Crond?

Нужно мне увидеть своими глазами, как работает скрипт, будучи запущенном из-под crond.

Для этого написал себе «эмулятор» крона. Это просто исполнимый sh/bash файл, в котором искуственно подготавливается та среда, которая создается кроном при запуске скриптов. В конце этого файла идет вызов скрипта, который должен запускаеться из-под крона.

Для эмулирования среды я учел три вещи:

1. Шелл, в котором выполняет скрипты крон. В моем случае крон запускает команды из-под sh, поэтому вначале скрипта-«эмулятора» у меня прописано:

#!/bin/sh

2. Пользователь, под которым выполняются команды при вызове из крона. У меня в кроне настроен запуск команд под моим пользователем xi. Я буду запускать скрипт «эмулятора» залогинившись как пользователь xi.

3. Я получил значения переменных окружения, которые создаются при запуске команд из-под крона. Для этого вызвал в кроне команду:

export >> /tmp/cron_enviroment.txt

Результат:

export HOME=«/home/xi»
export LOGNAME=«xi»
export OLDPWD=«/home/xi»
export PATH=«/usr/bin:/bin»
export PWD=«/home/xi»
export SHELL=«/bin/sh»
export SHLVL=«1»
export USER=«xi»

Для того, чтобы получить именно такие переменные окружения, скрипт-«эмулятор» у меня выглядит так:

#!/bin/sh

echo «Список переменных окружения:»
list=`export | sed 's/^export //' | sed 's/=.*//'`
echo $list

echo «Удаляются все переменные окружения...»
for line in $list
do
 echo «Удаляется переменная: $line»
 unset $line
done

export HOME=«/home/xi»
export LOGNAME=«xi»
export OLDPWD=«/home/xi»
export PATH=«/usr/bin:/bin»
export PWD=«/home/xi»
export SHELL=«/bin/sh»
export SHLVL=«1»
export USER=«xi»

echo «Установлен новый набор переменных:»
export

echo «Запускается пользовательский скрипт:»
sh -c /opt/script/reserve_backup.sh

Вроде-бы всё, что знаю, учёл.

Однако, результат получился не тот что ожидал.

Скрипт из-под крона не работает. А скрипт в эмуляторе - работает нормально. Так что я так и не могу увидеть, в чем проблема, когда скрипт выполняется в кроне.

Вопрос: что я еще не учел при изготовлении эмулятора?

Начальный каталог запуска отпадает, так как в пользовательском скрипте первой командой идет переход в нужный каталог, и все пути везде в коде абсолютные.

Что еще может быть?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

ммм, а не проще ли настроить отправку вывода скрипта на почту или зароутить в лог? Да и, по-моему, мой крон пишет в логгер.

Ты лучше напиши в admin что за _конкретные_ проблемы у тебя с кроном. У многих проблемы :). Так что помогут.

А так не учесть можно было много чего. Например, apparmor/selinux... Нужно знать твой дистр.

true_admin ★★★★★
()

cron запускает процессы без терминала и в новой сессии (setsid()).

А так ведь скрипт можно запускать с ″-x″, а потом на почту получить трассировку команд скрипта.

mky ★★★★★
()
Ответ на: комментарий от indie

Там ничего интересного

sh -c /opt/script/reserve_backup.sh

В общем, работа с облачным хранилищем зависит от времени суток и состояния сети провайдера (хоть на сервере гарантированные 100MBit).

В одно время сохранение 1Gb длится 5 минут.
В другое время больше часа .
Я расчитывал на 20 минут (ведь мегабиты гарантированные), и тупо не дожидался окончания процесса.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.