«Команда не найдена» при запуске скрипта через cron

29

Я хочу запустить свой скрипт в crontab, но у меня есть некоторые проблемы ...

В моем скрипте я запускаю эту команду:

db2 connect to myDB2

Это прекрасно работает, когда я запускаю это как пользователь db2inst1 , но когда я запускаю этот скрипт в db2inst1 crontab , я получаю это:

DB2: команда не найдена.

Как я могу решить это?

Волчок
источник

Ответы:

43

Чтобы избежать необходимости вводить абсолютный путь к команде, оболочка ввела $PATHпеременную среды, каждый каталог отделяется знаком a, :и поиск выполняется слева направо. cronчасто очищает всю среду, включая эту $PATHпеременную. Поэтому скрипт может вести себя по-другому в вашем cron по сравнению с поведением в оболочке.

Используйте абсолютные пути

Запустите which db2как db2inst1пользователь, чтобы получить полный путь к db2программе. Если вывод /usr/bin/db2, ваша команда cron будет выглядеть так:

/usr/bin/db2 connect to myDB2

Установите переменную PATH

Запустите echo "$PATH"как db2inst1пользователь, чтобы получить $PATHпеременную и убедиться, что эта переменная также доступна в вашем скрипте cron. Например, если вывод был /usr/local/bin:/usr/bin:/bin, вы бы поместили следующую строку в верхней части вашего сценария оболочки:

export PATH="/usr/local/bin:/usr/bin:/bin"
Lekensteyn
источник
8

Как сказано в /ubuntu//a/23438/227839 , вы должны установить PATHв своем сценарии оболочки:

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

или в файле crontab, который будет применяться ко всем заданиям cron:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2
Линь Дам
источник
Спасибо, это было полезно!
Ямаширо Рион
3

Вы должны определить, что такое db2 и myDB2 , в противном случае используйте абсолютное местоположение файла или приложения , которое хотите запустить.

Пример:

/bin/rm /home/ubuntu/a.txt
Махмудин Ашар
источник