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