Ваше использование оболочки может сделать это becuase, у Вас есть оболочка для выполнения его от, т.е. когда Вы входите в систему, все Ваши сценарии оболочки в Вашем профиле выполняются.
Крон не имеет такой роскоши. Когда это войдет в систему (как корень), это войдет в систему с оболочкой по умолчанию. Это препятствует тому, чтобы любой вошел в систему удаленно, но это также означает, что нет никаких автосценариев входа в систему, которые запущены.
Можно установить оболочку для крона, чтобы работать под, отредактировать crontab и добавить SHELL и ДОМАШНИЕ переменные, например.
SHELL=/bin/bash
HOME=/root
если они не будут установлены, то крон будет работать с оболочкой и корневым каталогом, указанным в/etc/passwd (которые являются, вероятно, ничем, возможно/bin/sh).
Если Вы хотите видеть, что крон среды работает как, добавьте задание крона, которое экспортирует ENV в файл, например:
$crontab -e
* * * * * env > /tmp/crontabenv.log
:wq
Несколько вещей происходят со мной при чтении этого.
Если Вы работаете, удар, повторяющий значение $BASH, должен расшириться до полного пути и имени файла используемого исполняемого файла удара.
Как Вы называете дату в своем сценарии. Вы называете его с именем полного пути или как "дата". Более поздний случай может привести к использованию функции, псевдонимов, или что бы ни случилось быть первым в пути, а не программе даты, которую Вы ожидаете.
Bash будет вести себя по-другому в некоторых случаях в зависимости от среды. Можно хотеть вывести среду в файл из сценария и посмотреть на него работающий от командной строки и от крона. Можно найти, что ПУТЬ отличается или что некоторая другая переменная среды установлена по-другому. Необходимо смочь вывести это в файл в/tmp путем помещения строки как "ENV>/tmp/environment. $$" в сценарии. Каждый раз, когда скрипт запущен, он распечатает среду в файл, названный средой. (pid сценария)
Можно установить также оболочку для всего crontab к тому, какой бы ни оболочка Вы хотите при помощи "SHELL =/path/to/new/shell" на строке отдельно.
По крайней мере некоторые версии крона интерпретируют '%' как специальный символ. Я не могу сказать из Вашего ответа выше, если Вы используете ту команду даты в самом crontab. Консультируйтесь со своей страницей справочника. Это
man 5 crontab
Другая crontab страница справочника для команды crontab а не формата файла.
на Linux, но я не уверен в bsd.
Если это так, можно зафиксировать его путем выхода из % с \перед ним.