Иногда возникает простая проблема при создании тасок на шелле — скрипты работают, если запускать их вручную, но не работают, если они запускаются на кроне или в каком-то другом окружении. При этом мы видим такую ошибку:
./task.sh: line 10: cp: command not found
Это происходит из-за того, что в этом окружении есть другие настройки переменной $PATH. Эта переменная указывает путь поиска для обнаружения и выполнения команд без абсолютного пути.
Разберем проблему на примере скрипта, который падает на выполнении команды cp. Давайте выполним простую команду, чтобы проверить значение этой переменной:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
А теперь узнаем, где находится команда cp:
whereis cp cp: /bin/cp
Если запустить вывод переменной $PATH на кроне, то мы сможем подтвердить, что в ней нет папки, в которой находится команда cp.
Чтобы заставить скрипт работать на кроне, есть несколько способов. Самый простой — добавить к командам абсолютный путь внутри нашей таски:
cp file /dir # вот это фейлится /bin/cp file /dir # вот это работает
Или переопределить переменную в начале скрипта:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Или сделать это в настройке кронтаба до вызова скрипта:
* * * * * PATH=$PATH:/usr/local/bin /path/to/script.sh
Если скрипты, которые запускались вручную, не запускаются на кроне или в другом окружении, скорее всего, проблема в переменной $PATH. Чтобы решить эту проблему, стоит или переопределять значение переменной, или указывать абсолютный путь к командам в теле скрипта.
Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.
Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…
В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…
Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…
Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…
Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…
IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…