В crontab моего пользователя, в системе CentOS, у меня есть что-то вроде этого:
58 12 * * * cd /home/joe/dev; echo `pwd` | logger
Это производит в/var/log/messages:
Feb 19 12:58:01 srv01 joe: /home/joe
Вместо вывода:
Feb 19 12:58:01 srv01 joe: /home/joe/dev
Почему каталог не сохранен при выводе pwd
?
Команды выполняются независимо, поэтому это не то же самое, что ожидать, что они будут выполняться в одной оболочке / среде. Вам, вероятно, будет лучше, если вы создадите сценарий оболочки, который выполняет желаемые команды, а затем вызовите сценарий из crontab.
Обновление: Вышеупомянутое было предположением и / или предполагаемой возможностью (как так кратко и настойчиво указано в комментарии). Итак, я решил протестировать CentOS 6.6 и ... Я ошибся ... Следующая запись crontab работала правильно:
* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;
Так что это должно сработать для вас ... Я все еще утверждаю, что лучше всего использовать сервер, вызывая скрипты не отдельные команды в вашем crontab ... но это предпочтение (пожалуйста, будьте любезны в комментариях ...).
Следующее должно работать:
58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)
Заключив команды в круглые скобки, вы должны принудительно все они должны работать в одной подоболочке.
Согласно этот ответ Unix & Linux SE , вы можете заменить ;
на &&
, поскольку разные версии cron в разных дистрибутивах Linux обрабатывают этот тип функциональности по-разному:
cd /home/joe/dev && echo `pwd` | logger