сценарий оболочки не запускается через crontab, работает нормально вручную
Вопрос
Я попытался экспортировать свои пути и переменные, но 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
Несколько мыслей.
- Удалить
--
после#!/bin/bash
- Обязательно направляйте выходные данные сценария, видимые cron, на почту или в другое место, где вы можете их просмотреть (например,MAILTO=желаемыйпользователь)
- Убедитесь, что ваш скрипт запущен и не заблокирован другим долго выполняющимся скриптом (например,во второй строке добавьте
touch /tmp/MY_SCRIPT_RAN && exit
) - Отладка скрипта с помощью
set -x
иset -v
как только вы узнаете, что он действительно работает
Определяете ли вы необходимые пути и переменные окружения в своем личном .profile (или другом скрипте)?Вы пытались найти этот конкретный файл (или это то, что вы уже делаете с /root/.bash_profile?)
Другой способ спросить об этом:Вы уверены, что все необходимые пути и переменные окружения, которые вы ожидаете, действительно доступны?
По крайней мере, пробовали ли вы отображать отдельные значения или просто использовать команду «env» в своем сценарии, а затем просматривать стандартный вывод?
укажите полные пути к вашему файлу jar и под каким пользователем вы запускаете crontab?Если вы настроили его для обычного пользователя, думаете ли вы, что у этого пользователя есть разрешение на получение корневого профиля?