скрипт оболочки не запускается через crontab, нормально запускается вручную - PullRequest
6 голосов
/ 09 февраля 2010

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

У меня есть сценарий оболочки, который запускает файл JAR. Это не работает правильно.

После прочтения я прочитал, что это обычно происходит из-за неправильных путей из-за запуска cron через собственный экземпляр оболочки, и поэтому он не имеет таких настроек, как мой профиль.

Вот как выглядит мой скрипт сегодня после нескольких модификаций:

#!/bin/bash --

. /root/.bash_profile

/usr/bin/java -jar Pharmagistics_auto.jar -o

...

это самые важные части скрипта, остальные основаны на простой оболочке.

Может кто-нибудь сказать мне, что я делаю не так?

Ответы [ 6 ]

13 голосов
/ 09 февраля 2010

Попробуйте указать полный путь к файлу jar:

/usr/bin/java -jar /path/to/Pharmagistics_auto.jar -o
3 голосов
/ 09 февраля 2010

Я бы просто сказал вам, что вы уже исключили: проверьте свой путь и среду.

Поскольку вы уже сделали это, начните отладку. Например, записать контрольные точки в файл журнала, чтобы увидеть, как далеко продвигается ваш скрипт (если вообще был запущен), проверить файл журнала cronjob на наличие ошибок, проверить вашу почту (cron отправляет сообщения об ошибках) и так далее ...

Не очень конкретно, извините.

2 голосов
/ 09 февраля 2010

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

Кроме того, не уверен, что это опечатка в том, как вы ввели вопрос, но я вижу:

usr/bin/java

... и я не могу не заметить, что вы не указываете полный путь. Он ищет каталог с именем "usr" в текущем рабочем каталоге. Время для crontab, cwd не определено, поэтому ваша ссылка никуда не идет.

Попробуйте указать полный путь от root, например:

/usr/bin/java

Или, если вы хотите увидеть пример относительного пути в действии, вы также можете попробовать:

cd /

usr/bin/java

1 голос
/ 09 февраля 2010

Несколько мыслей.

  1. Удалить -- после #!/bin/bash
  2. Не забудьте направить вывод скрипта, увиденный cron, на почту или куда-либо еще, где вы можете его просмотреть (например, MAILTO = требуемый пользователь)
  3. Убедитесь, что ваш скрипт запущен и не заблокирован другим долгосрочным скриптом (например, во второй строке добавьте touch /tmp/MY_SCRIPT_RAN && exit)
  4. Отладка скрипта с использованием set -x и set -v, как только вы узнаете, что он на самом деле работает
0 голосов
/ 09 февраля 2010

укажите полный путь к вашему файлу jar, и с каким пользователем вы запускаете crontab? Если вы настроили его для обычного пользователя, думаете ли вы, что у пользователя есть разрешение на создание профиля root?

0 голосов
/ 09 февраля 2010

Определяете ли вы необходимые пути и переменные env в вашем личном .profile (или другом скрипте)? Вы пытались получить этот конкретный файл (или это то, что вы уже делаете с /root/.bash_profile?)

Другой способ задать вопрос: вы уверены, что все необходимые пути и переменные, которые вы ожидаете, действительно доступны?

Если ничего другого, вы пытались повторить отдельные значения или просто использовать команду "env" в своем скрипте, а затем просмотреть стандартный вывод?

...