Многие системные администраторы Linux часто сталкиваются с одной и той же проблемой: при попытке запуска команды из-под демона Cron, она ведет себя не так, как при обычном вызове из консоли. Не помогает даже настройка запуска из Cron под конкретным пользователем: запуск команды от данного пользователя работает нормально в консоли, и совершенно с другим результатом в Cron. Дело осложняется тем, что из-под крона невозможно увидеть что же на самом деле происходит.
Cron Emulator - это небольшой скрипт, который создает среду запуска команд аналогичную среде Cron. Прописав в его конец интересуемые команды, можно отследить их выполнение "вживую", так, как будто они выполняются в Cron.
Использование
Пропишите команды после строки "# Examine commands", и запустите скрипт на выполнение. Команды будут выполнены от текущего пользователя с окружением, аналогичным Cron.
Для тех кто забыл: чтобы в Cron запускать скрипт от нужного пользоватя, его нужно просто узазать в строке запуска стрипта в файле /etc/crontab. Вот пример строки файла /etc/crontab с указанием имени пользователя:
0/1 * * * * ИмяПользователя Команда
Разработка
Работа скрипта проверена в CentOs 5.8 и в Debian Squeeze. Обсудить скрипт можно на форуме или написать автору на емайл (см. внизу страницы).
Скрипт
#!/bin/sh
# Cron Emulator v.0.1
# © Sergey M. Stepanov 2013, xintrea@gmail.com, https://webhamster.ru
# License: GPL v.3
userName=`whoami`
echo "Variable names:"
list=`export | sed 's/^export //' | sed 's/=.*//'`
echo $list
echo "Remove all variables"
for line in $list
do
echo "Remove variable: $line"
unset $line
done
export HOME="/home/${userName}"
export LOGNAME="${userName}"
export OLDPWD="/home/${userName}"
export PATH="/usr/bin:/bin"
export PWD="/home/${userName}"
export SHELL="/bin/sh"
export SHLVL="1"
export USER="${userName}"
echo "User variable set:"
export
echo "Run examine commands..."
# Examine commands
... Your commands ...