
В 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
?
решение1
Должно сработать следующее:
58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)
Заключив команды в скобки, вы заставите их все выполняться в одной и той же подоболочке.
решение2
Команды запускаются независимо, поэтому это не то же самое, что ожидать их запуска в той же оболочке/среде. Вероятно, вам лучше было бы создать скрипт оболочки, который выполняет нужные команды, а затем вызвать этот скрипт из crontab.
Обновление: Вышеизложенное было догадкой и/или предложенной возможностью (как кратко и агрессивно указано в комментарии). Поэтому я решил протестировать CentOS 6.6 и... я ошибался... Следующая запись в crontab работала правильно:
* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;
Так что это должно было сработать для вас... Я по-прежнему утверждаю, что вам будет лучше вызывать скрипты, а не отдельные команды в вашем crontab... но это уже предпочтение (поэтому, пожалуйста, будьте любезны в комментариях...).
решение3
Согласноэтот ответ Unix&Linux SE, вы можете заменить ;
на &&
, поскольку разные версии cron в разных дистрибутивах Linux по-разному обрабатывают этот тип функциональности:
cd /home/joe/dev && echo `pwd` | logger