сценарий оболочки не запускается через crontab, работает нормально вручную

StackOverflow https://stackoverflow.com/questions/2224969

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

#!/bin/bash --

. /root/.bash_profile

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

...

это наиболее важные части сценария, остальные основаны на оболочке.

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

usr/bin/java

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

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

/usr/bin/java

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

cd /

usr/bin/java

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

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

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

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

По крайней мере, пробовали ли вы отображать отдельные значения или просто использовать команду «env» в своем сценарии, а затем просматривать стандартный вывод?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top