Linux: как запустить команду в данном каталоге

16

Я просто хочу просто запустить команду (на самом деле это скрипт оболочки) из заданного каталога как задание cron. Как я могу запустить его, чтобы он был установлен в данный каталог без использования cd.

Zombies
источник

Ответы:

16

Ваш вопрос имеет мало смысла. Использование cd. Если вы просите ответ не использовать, cdпотому что вы пробовали его, и он не работал, скорее всего, вы неправильно ввели его в crontab.

Самый простой способ - написать небольшой сценарий оболочки, который запустит cd и выполнит вашу основную задачу, а затем создаст сценарий.

Daenyth
источник
1
Может ли crontab позволить мне поместить несколько команд в одну работу? Если нет, то мне пришлось бы записать код [путь]. И путь может измениться, вызывая действительно раздражающие проблемы развертывания, а также децентрализацию конфигурации, чего я избегаю любой ценой.
Зомби
1
@Zombies: да, вы можете поместить несколько команд в одно задание (например, разделив их точками с запятой или &&), но вы также можете написать отдельный скрипт, который содержит все команды, и просто указать путь к скрипту в cron, как предложил Daenyth. Ваш сценарий может сделать что-то вроде чтения каталога из файла конфигурации, если вам нравится - суть в том, что вы хотите вставить имя каталога в свой сценарий, это не повод не использовать cd.
Дэвид Z
Понимаю. Я захочу использовать cd на crontab напрямую, так как, если я запишу его в файл, мне придется редактировать его в каждом файле, что делает для деликатных / легко ломаемых конфигураций.
Зомби
3
И если вы поместите компакт-диск в файл crontab, вам придется редактировать его в каждом файле crontab. Я не понимаю проблемы. Может быть, вы могли бы объяснить, что вы пытаетесь сделать более полно.
Гариджон
И еще одна причина для запуска сценария оболочки из файла crontab заключается в том, чтобы убедиться, что среда настроена правильно. Среда, предоставляемая заданию cron, обычно даже минимальна, поэтому вам обычно нужно сбросить его на что-то более удобное.
Джонатан Леффлер
60

Просто укажите путь к сценарию. Нет необходимости в cd:

0 12 * * * /path/to/script args

Если ваш скрипт ищет файлы в ., то вы будете должны использовать cd:

0 12 * * * cd /some/dir && /path/to/script args
Приостановлено до дальнейшего уведомления.
источник
2
См. Также serverfault.com/questions/290313/…
Уилл Шеппард
4
&&, как в ответе @WillSheppard ссылки на, было бы лучше, чем ;потому, что &&только следующая команда запускается, если предыдущая команда была успешной.
Макс Хейбер
1
@mheiber: исправлено
приостановлено до дальнейшего уведомления.