"/ usr / bin / env bash" не найден при запуске из скрипта cron

7183
snitko

У меня есть это в моем crontab:

PATH=/usr/bin:/usr/local/bin:$PATH */1 * * * * /usr/bin/env bash > ~/cron.log 2>&1 

Выход в cron.logследующем:

/usr/bin/env bash: No such file or directory 

/usr/bin/envа также /bin/bashоба существуют. И я также могу запустить эту команду от того же пользователя, которому принадлежит этот crontab без каких-либо ошибок. Я также попытался добавить

SHELL=/bin/bash 

на вершину crontab. Нет эффекта. Понятия не имею, что происходит. Также это:

*/1 * * * * which bash > ~/cron.log 2>&1 

вообще ничего не показывает в лог-файле. Это все, что у меня есть в моем crontab для этого пользователя, и ничего больше.

0
Является ли это опечаткой, в вашем последнем примере, она не должна читать `\`, который bash \ ``, вместо того, который 'какой bash`? BenjiWiebe 11 лет назад 0

3 ответа на вопрос

4
BenjiWiebe

Поскольку ваш скрипт cronзапускается с #!/usr/bin/env bash( верно? ), Все, что вам нужно сделать, crontabэто:

*/1 * * * * /path/to/script > ~/cron.log 2>&1 

И убедитесь, что скрипт действительно что-то выводит; если ваш сценарий абсолютно тихий, ваш файл журнала будет пустым.

Мне пришлось добавить `PATH =" / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games " `а также. Я должен был войти на сервер как root (не sudo), чтобы выяснить, какой корневой путь был по умолчанию. Очевидно, что cron слишком туп, чтобы использовать профиль пользователя по умолчанию chovy 8 лет назад 0
1
snitko

Оказывается, я не должен был иметь эту строку:

PATH=/usr/bin:/usr/local/bin:$PATH 

Удаление из crontab решило проблему.

Сочетание твоего и @ benjiwiebe решило мою проблему. Крон действительно слишком глуп, чтобы что-либо знать. Его путь по умолчанию в основном 2 каталога. chovy 8 лет назад 0
-3
Stephan

Не уверен, что именно ты пытаешься сделать, но для меня

# which bash /bin/bash 

Так что постарайтесь

/usr/bin/env /bin/bash /path/to/some/script > ~/cron.log 2>&1 
Один из сценариев, которые я запускаю с помощью cron (`rvm-exec`), имеет в верхней части` #! / Usr / bin / env bash`, и я не могу его изменить, потому что он ломает все. Я понял, что проблема в данном конкретном случае связана с cron, а не с rvm, поскольку cron даже не знает, где находится bash. snitko 11 лет назад 0
Это полностью отрицает цель использования `/ usr / bin / env / bin / bash`; `/ usr / bin / env` ищет в PATH` bash`; вы используете `/ usr / bin / env`, чтобы найти` bash`, когда вы не уверены, где находится `bash`. BenjiWiebe 11 лет назад 3
просто позвоните bash на вершине crontab chovy 8 лет назад 0