Почему cd не меняет текущий каталог в crontab?

Почему cd не меняет текущий каталог в crontab?

В 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

Связанный контент