Иногда возникает простая проблема при создании тасок на шелле — скрипты работают, если запускать их вручную, но не работают, если они запускаются на кроне или в каком-то другом окружении. При этом мы видим такую ошибку:
./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. Чтобы решить эту проблему, стоит или переопределять значение переменной, или указывать абсолютный путь к командам в теле скрипта.
Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…