Crontab - запустить в каталоге

170

Я хотел бы установить задание для ежедневного запуска в корневом crontab. Но я бы хотел, чтобы он выполнялся из определенного каталога, чтобы он мог найти все нужные ему файлы, поскольку в приложении имеется множество относительных путей.

В любом случае, я могу сказать crontab запускаться из определенного каталога?

user333746
источник

Ответы:

318

Все задания выполняются оболочкой, поэтому запустите этот фрагмент оболочки командой, чтобы изменить каталог.

cd /path/to/directory && ./bin/myapp

Что касается использования &&вместо ;: обычно это не имеет значения, но если cdкоманда не выполняется (например, потому что каталог не существует) с &&приложением не выполняется, тогда как с ;выполнением (но не в намеченном каталоге ).

Жиль "ТАК - перестань быть злым"
источник
Вместо того, чтобы добавлять в основном дублированный ответ, позвольте мне добавить, что вы можете выбрать, какую оболочку (например, если вам нужен bash, а не sh), установив SHELLв вашем crontab.
Эдд Стил
12
+1. решение любого другого связанного вопроса состоит в том, чтобы переписать сценарий с абсолютными путями. это именно то, что мне нужно
Conrad.Dean
2
Из любопытства, не могли бы вы использовать точку с запятой ;вместо двойных амперсандов &&или это не сработало? И почему?
Джошуа Пинтер
32
@JoshPinter Обычно это не имеет значения. Но если cdкоманда терпит неудачу (например, потому что каталог не существует), с &&, приложение не выполняется. С помощью ;он выполняется (но не в намеченном каталоге).
Жиль "ТАК - перестань быть злым"
1
Я сделаю это для всех заданий cron моих приложений, вы спасли меня от изменения моих исходных файлов, большое спасибо
Бухгалтер م