4

Я работаю в Redhat и у меня есть несколько программ, расположенных в папке /usr/local/bin я хотел бы вызвать из crontab для пользователя root . Я думал, что, поместив двоичные файлы в эту папку, будет достаточно вызвать программу напрямую, как в оболочке.

По сути, мне нужно указывать папку каждый раз, чтобы crontab ниже не работал

 5 9  * * 1,2,3,4,5 my_bin some_args

но я меняю это на

 5 9  * * 1,2,3,4,5 source ~/.bashrc; /usr/local/bin/my_bin some_args

Ты знаешь почему?

Причиной, по которой я выбрал bashrc было добавление некоторых библиотек среды, в частности LD_LIBRARY_PATH поскольку мой двоичный файл не смог найти некоторые общие библиотеки из /usr/local/lib .

1 ответ1

9

Задания cron выполняются в очень минимальной среде, и, поскольку они выполняются непосредственно crond без оболочки (если вы не заставляете ее создавать), обычная настройка оболочки никогда не происходит. Есть два стандартных способа обойти это. Во-первых, вы можете определить переменные окружения в вашем crontab (обратите внимание, что они будут применяться ко всем заданиям - по крайней мере, к тем, которые перечислены после определений):

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
LD_LIBRARY_PATH=/usr/local/lib

5 9  * * 1,2,3,4,5 my_bin some_args

Во-вторых, вы можете отредактировать скрипт, чтобы он был менее зависимым от его среды (например, он сам должен определить, что ему понадобится), а затем использовать полный путь в записи crontab:

5 9  * * 1,2,3,4,5 /usr/local/bin/my_bin some_args

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .