Mam skrypt bash, którego jedynym zadaniem jest wykonanie pliku jar.
sms.sh
java -jar /volume1/homes/jar/smssender.jar
Za pomocą serwera Synology NAS skonfigurowałem zadanie.
Dodanie polecenia do wykonania skryptu bash. Dodawanie danych wyjściowych dziennika.
Wykonuję moje nowe zadanie.
Sprawdzanie dziennika, aby zobaczyć następujący błąd:
/volume1/homes/jar/sms.sh: linia 1: java: nie znaleziono polecenia
Sprawdzanie wersji / instalacji Java:
Ręczne sprawdzanie wykonania skryptu sh (działającego):
Ktoś z tą samą dziwną sprawą? Wszelkie obejścia / pomysły?
próbowałem
- Ponowne uruchamianie mojego serwera NAS
- Odinstaluj / zainstaluj pakiet Java8
ale żaden nie działał.
/whatever/path/to/java/is/java /volume1/homes/jar
wywołaj go za pomocą (nie jest to specyficzne dla synologii)Odpowiedzi:
Gdy program planujący zadania Synology wykonuje skrypt,
sms.sh
ustawienie PATH jest pobierane ze skryptu/etc/crontab
. Który nie zawiera ścieżki Java.Domyślne środowisko powłoki logowania jest zdefiniowane jako int
/etc/profile
. Na końcu znajduje się sekcja umożliwiająca dodanie ścieżki Java.Jak już wspomniano w podanych wcześniej komentarzach, nie jest sugerowany skrypt profilowy przeznaczony dla powłoki interaktywnej. Możesz naśladować zachowanie
/etc/profile
skryptu wsms.sh
skrypcie, aby ustawić ścieżkę CLASSPATH PATH JAVA_HOME LANG.Podniesione kwestie dotyczące twardego zakodowania ścieżki w skrypcie i wynikająca z tego zmniejszona przenośność mogą mieć pierwszeństwo w tym konkretnym przypadku.
źródło
Nie jestem zaznajomiony z
Synology
tym fwiw ...Skrypt powłoki działa po uruchomieniu w wierszu poleceń, ponieważ konkretna sesja logowania załadowała już zestaw zmiennych środowiskowych (np. Po zalogowaniu się do
.profile/.bashrc
skryptu (ów) w katalogu osobistym jest pobierany i ładowane są różne zmienne środowiskowe specyficzne dla java -PATH, JAVA_HOME, CLASSPATH
itp.), które pozwalająjava
i skrypt działa bez problemu.Synology
Błąd zadania zakończonego niepowodzeniem wskazuje, że zmienne środowiskowe specyficzne dla języka Java nie zostały załadowane i dlatego zadanie / skrypt nie może zlokalizowaćjava
.Zakładając,
Synology
że nie ma ustawienia / flagi konfiguracji, która przewiduje wstępne ładowanie profilu logowania, „łatwym” rozwiązaniem byłoby edytowanie skryptu (sms.sh
) i uzyskanie odpowiedniego pliku zasobów przed wykonaniem jakichkolwiek operacji (np. Wywołaniajava
). Prosty przykład:UWAGI :
root
na nazwę logowania, pod którą skrypt ma zostać uruchomiony (w przykładowychSynology
obrazach wygląda na to, że wybrałeśroot
użytkownika, stąd moje przykładowe referencje~root
)~root/.bashrc
ścieżką do profilu użytkownika, aby wstępnie załadować zmienne środowiskowe potrzebne do znalezienia skryptujava
źródło
.bashrc
nie zmienia to, w jaki sposób działają demony, prawda?), Ale zamiast tego mogą powodować przerwanie produkcji./etc/profile.d
raczej niż~/.bashrc
jest to istotne..profile
używają.bash_profile
, inni używają/etc/profile.d
, inni ustawiają zmienne środowiskowe z PAM itp.) . Tak czy inaczej, robisz coś, czego nie można przenieść. Przynajmniej hardcodingPATH=$PATH:/whatever/specific/location
jest zmieniająca się do ustawień, a jego zachowanie jest oczywiste dla czytelników (którzy nie muszą się martwić o to, czy będzie to zmienić później).