Я хочу запустить свой скрипт в crontab, но у меня есть некоторые проблемы...
В моем сценарии я выполняю эту команду:
db2 connect to myDB2
Это хорошо работает, когда я выполняю это как db2inst1 пользователь, но когда я запускаю этот скрипт в db2inst1 crontab, я получаю это:
db2: команда, не найденная.
Как я могу решить это?
Избегать необходимости вводить полный путь к команде, оболочки, представленные $PATH
переменная среды, каждый каталог разделяется a :
и поиски сделаны слева направо. cron
часто очищает целую среду, включая это $PATH
переменная. Поэтому сценарий может вести себя по-другому в Вашем кроне по сравнению с поведением в оболочке.
Выполненный which db2
как db2inst1
пользователь для получения полного пути для db2
программа. Если вывод /usr/bin/db2
, Ваша команда крона была бы похожа:
/usr/bin/db2 connect to myDB2
Выполненный echo "$PATH"
как db2inst1
пользователь для получения $PATH
переменная и удостоверяется, что эта переменная доступна в Вашем сценарии крона также. Например, если вывод был /usr/local/bin:/usr/bin:/bin
, Вы поместили бы следующую строку в верхнюю часть Вашего сценария оболочки:
export PATH="/usr/local/bin:/usr/bin:/bin"
Необходимо определить, каковы db2 и myDB2, иначе используйте абсолютное местоположение 'файла' или 'приложения', которые хотят работать.
Пример:
/bin/rm /home/ubuntu/a.txt
Как отвечено в https://askubuntu.com/a/23438/227839, необходимо установить PATH
в Вашем сценарии оболочки:
#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"
# rest of script follows
или в crontab файле, который будет относиться ко всем заданиям крона:
PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2