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

3
задан 20 February 2015 в 04:47
3 ответа

Команды выполняются независимо, поэтому это не то же самое, что ожидать, что они будут выполняться в одной оболочке / среде. Вам, вероятно, будет лучше, если вы создадите сценарий оболочки, который выполняет желаемые команды, а затем вызовите сценарий из crontab.

Обновление: Вышеупомянутое было предположением и / или предполагаемой возможностью (как так кратко и настойчиво указано в комментарии). Итак, я решил протестировать CentOS 6.6 и ... Я ошибся ... Следующая запись crontab работала правильно:

* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;

Так что это должно сработать для вас ... Я все еще утверждаю, что лучше всего использовать сервер, вызывая скрипты не отдельные команды в вашем crontab ... но это предпочтение (пожалуйста, будьте любезны в комментариях ...).

6
ответ дан 3 December 2019 в 04:46

Следующее должно работать:

58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)

Заключив команды в круглые скобки, вы должны принудительно все они должны работать в одной подоболочке.

4
ответ дан 3 December 2019 в 04:46

Согласно этот ответ Unix & Linux SE , вы можете заменить ; на && , поскольку разные версии cron в разных дистрибутивах Linux обрабатывают этот тип функциональности по-разному:

cd /home/joe/dev && echo `pwd` | logger
2
ответ дан 3 December 2019 в 04:46

Теги

Похожие вопросы