"/ Usr / bin / env bash" не знайдено під час запуску із сценарію cron


0

Я маю це в своєму кроні:

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

до вершини кронтабу. Без ефекту. Не майте поняття, що відбувається. Також це:

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

нічого не показує у файлі журналу. Це все, що я маю в своєму crontab для цього користувача, нічого іншого.


Це помилка друку у вашому останньому прикладі не повинна читати `which bash`замість цього which bash?
BenjiWiebe

Відповіді:


4

Оскільки ваш сценарій, який 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

1

Виявляється, я не повинен був мати цей рядок:

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

Видалення його з crontab виправило проблему.


Поєднання вашого @ benjiwiebe вирішило мою проблему. Крон насправді занадто німий, щоб щось знати. Його за замовчуванням шлях в основному 2 каталогів.
чови

-3

Я не впевнений, що саме ви намагаєтеся зробити, але для мене:

# 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

3
Це повністю перемагає мету використання /usr/bin/env /bin/bash; /usr/bin/envшукає ПАТ bash; ви використовуєте /usr/bin/envдля пошуку, bashколи не знаєте, де bashзнаходиться.
BenjiWiebe

просто зателефонуйте Баш на вершині crontab
chovy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.