Планировщик Synology. sh java команда не найдена - PullRequest
9 голосов
/ 02 февраля 2020

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

смс. sh

java -jar /volume1/homes/jar/smssender.jar

Использование NAS-устройства Synology Я поставил задачу.

Task Setup run by root

Добавление команды для выполнения сценария bash. Добавление вывода журнала.

enter image description here

Выполнение моей новой задачи.

enter image description here

Проверка журнала, чтобы увидеть следующую ошибку:

/ volume1 / homes / jar / sms. sh: строка 1: java: команда не найдена

Проверка Java версия / установка:

enter image description here

Проверка выполнения сценария sh вручную (работает):

enter image description here

Кто-нибудь с таким же странным случаем? Есть обходные пути / идеи?

Я пытался

  • Перезагрузить мой NAS
  • Удалить / установить пакет Java8

, но ничего не получилось.

Ответы [ 2 ]

5 голосов
/ 12 февраля 2020

Когда планировщик задач Synology выполняет сценарий sms.sh, значение PATH берется из сценария /etc/crontab. Который не содержит путь Java.

Среда оболочки входа по умолчанию определена как int /etc/profile. В конце есть раздел для добавления пути Java.

PATH=$PATH:/var/packages/Java8/target/j2sdk-image/bin # Synology Java runtime enviroment
PATH=$PATH:/var/packages/Java8/target/j2sdk-image/jre/bin # Synology Java runtime enviroment
JAVA_HOME=/var/packages/Java8/target/j2sdk-image/jre # Synology Java runtime enviroment
CLASSPATH=.:/var/packages/Java8/target/j2sdk-image/jre/lib # Synology Java runtime enviroment
LANG=en_US.utf8 # Synology Java runtime enviroment
export CLASSPATH PATH JAVA_HOME LANG # Synology Java runtime enviroment

Как уже указывалось в уже приведенных комментариях, поиск сценария профиля, предназначенного для интерактивной оболочки, не предлагается. Вы можете имитировать c поведение скрипта /etc/profile в вашем скрипте sms.sh, чтобы установить CLASSPATH PATH JAVA_HOME LANG.

Поднятые вопросы о жестком кодировании пути в вашем скрипте и, как следствие, об уменьшении переносимости могут иметь приоритет любовника в этом конкретном случае c.

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

Я не знаком с Synology, поэтому fwiw ...

Сценарий оболочки работает, когда выполняется в командной строке, потому что конкретный сеанс входа в систему уже загрузил набор переменных среды (например, при вход в сценарий .profile/.bashrc в домашнем каталоге выполняется и загружаются различные переменные окружения java -specifi c - PATH, JAVA_HOME, CLASSPATH, et c), которые позволяют java и сценарию запустить без проблем.

Ошибка задания Synology означает, что переменные среды java -specifi c не были загружены, и, следовательно, задание / сценарий не может найти java.

При условии, что Synology не имеет параметра / флага конфигурации, предусматривающего предварительную загрузку профиля входа в систему, «простым» решением было бы отредактировать сценарий (sms.sh) и получить из него соответствующий файл ресурса. перед выполнением каких-либо операций (например, вызов java). Простой пример:

$cat sms.sh
#!/usr/bin/bash

. ~root/.bashrc      # load the root account profile before continuing ...

java ...

NOTES :

  • замените root именем входа, под которым должен запускаться скрипт (в В примере Synology изображений кажется, что вы выбрали пользователя root, поэтому в моем примере ссылки ~root)
  • заменяют ~root/.bashrc на путь к профилю пользователя, чтобы предварительно загрузить переменные среды необходимо чтобы скрипт мог найти java
...