"Команда не знайдена" під час запуску сценарію через cron


29

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

У своєму сценарії я запускаю цю команду:

db2 connect to myDB2

Це добре працює, коли я запускаю це як db2inst1 користувач, але коли я запускаю цей скрипт у db2inst1 crontab , я отримую це:

db2: команда не знайдена.

Як я можу це вирішити?

Відповіді:


43

Щоб уникнути необхідності вводити абсолютний шлях до команди, оболонки ввели $PATHзмінну середовища, кожен каталог відокремлений а, :а пошук здійснюється зліва направо. cronчасто очищає все середовище, включаючи цю $PATHзмінну. Тому сценарій може поводитися по-різному у вашому кроні порівняно з поведінкою в оболонці.

Використовуйте абсолютні шляхи

Запустіть 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"

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

Дякую, це було корисно!
Yamashiro Rion

3

Ви повинні визначити, що таке db2 та myDB2 , інакше використовувати абсолютне розташування " файла " чи " програми ", яке потрібно запустити.

Приклад:

/bin/rm /home/ubuntu/a.txt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.