Назад | Перейти на главную страницу

Почему 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?

Команды выполняются независимо, поэтому ожидание их запуска в той же оболочке / среде не одно и то же. Вероятно, вам было бы лучше создать сценарий оболочки, который выполняет желаемые команды, а затем вызывать сценарий из 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