Synology Scheduler .sh java komutu bulunamadı


9

Ben sadece görev bir jar dosyası yürütmektir bash betiği var.

sms.sh

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

Synology NAS'ımı kullanarak bir görev ayarladım.

Kök tarafından çalıştırılan Görev Kurulumu

Bash betiğini çalıştırmak için komut ekleme. Günlük çıktısı ekleme.

resim açıklamasını buraya girin

Yeni Görevimi yürütüyorum.

resim açıklamasını buraya girin

Aşağıdaki hatayı görmek için günlüğün kontrol edilmesi:

/volume1/homes/jar/sms.sh: satır 1: java: komut bulunamadı

Java sürümünü / kurulumunu kontrol etme:

resim açıklamasını buraya girin

Sh komut dosyasının yürütülmesini manuel olarak kontrol etme (çalışıyor):

resim açıklamasını buraya girin

Aynı tuhaf davaya sahip olan var mı? Herhangi bir geçici çözüm / fikir var mı?

denedim

  • NAS'ımı yeniden başlatma
  • Java8 paketini kaldırma / yükleme

ama hiçbiri işe yaramadı.


4
Sorununuz göz önüne alındığında, muhtemelen iş yürütüldüğünde env (JAVA_HOME, PATH) doğru ayarlanmamış bir sorundur. Java yürütülebilir dosyası için mutlak yol kullanmanız gerekir, ya da bunu sizin için yapan bir dosya kaynağı.
NoDataFound

@NoDataFound Mutlak yolla ne demek istiyorsun? /Volume1/(...)/file.jar yol değil mi? Yardım ve zaman için teşekkür ederim
piguy

3
İlk olarak, java yürütülebilir dosyasını bulun. Sonra, /whatever/path/to/java/is/java /volume1/homes/jar(bu sinolojiye özgü değildir) kullanarak çağırın
NoDataFound

1
Buraya muhtemelen komutu çalıştıran her kullanıcı eninde sonunda OP'nin oturum açtığı kullanıcı olmadığından (olduğundan emin olmadığı sürece) ve bu nedenle farklı bir PATH'ye sahip olduğunu buraya eklemeliyiz.
BadZen

(Ayrıca: bu gerçekten konu üzerinde mi?)
BadZen

Yanıtlar:


5

Synology görev zamanlayıcısı komut dosyasını yürüttüğünde sms.shYOL ayarı komut dosyasından alınır /etc/crontab. Hangi Java yolu içermiyor.

Varsayılan giriş kabuğu ortamı int olarak tanımlanmıştır /etc/profile. Sonunda Java yolu eklemek için bir bölüm var.

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

Zaten verilen yorumlarda belirtildiği gibi, etkileşimli bir kabuk için bir profil komut dosyası kaynağı önerilmemektedir. CLASSPATH PATH JAVA_HOME LANG ayarlamak /etc/profileiçin sms.shkomut dosyanızdaki komut dosyasının davranışını taklit edebilirsiniz .

Senaryonuzdaki yolun kodlanması ve ortaya çıkan azaltılmış taşınabilirliğin bu özel durumda sevgilisi önceliği olabilir.


Cevabınız bana çok yardımcı oldu ve doğru, ancak telefonumda tıkladım ve kullanıcıya 100 puan verdim. Gerçekten üzgünüm
piguy

@piguy Bu canlı. ;-)
SubOptimal

-1

Ben Synologybu kadar fwiw aşina değilim ...

Kabuk komut dosyası, komut satırında yürütüldüğünde çalışır, çünkü belirli oturum açma oturumu bir dizi ortam değişkeni zaten yüklemiştir (örneğin, giriş .profile/.bashrcdizinindeki komut dosyalarında oturum açıldığında kaynaklanır ve çeşitli java'ya özgü ortam değişkenleri yüklenir) - PATH, JAVA_HOME, CLASSPATH, vb) izin verir javave komut dosyasının sorunsuz çalışmasına izin verir .

Başarısız Synologyiş hatası, java özgü ortam değişkenlerinin yüklenmediğini ve bu nedenle işin / komut dosyasının bulunamadığını gösterir java.

SynologyBir giriş profilini önceden yüklemeyi öngören bir yapılandırma ayarının / işaretinin olmadığını varsayarsak , 'kolay' çözüm betiği düzenlemek ( sms.sh) ve herhangi bir işlem yapmadan önce uygun kaynak dosyasını kaynak haline getirmektir (örneğin, arama java). Basit bir örnek:

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

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

java ...

NOTLAR :

  • rootbetiğin altında çalıştırılacak oturum açma adıyla değiştirin (örnek Synologyresimlerde rootkullanıcıyı seçtiniz, dolayısıyla örnek referanslarım ~root)
  • ~root/.bashrckomut dosyasının bulmasını sağlamak için gereken ortam değişkenlerini önceden yüklemek için kullanıcı profiline giden yolla değiştirinjava

Lütfen etkileşimli kullanım için yazılan yapılandırma dosyalarını etkileşimli olmayan bağlamlarda kullanılmaya teşvik etmeyin - bu, insanların yaptıkları değişikliklerin zararsız olduğunu düşündüğü durumlara yol açar (çünkü .bashrccinlerin çalışma şeklini değiştirmez, değil mi?) üretim kırılması.
Charles Duffy

1
Gerçek konumu bulmak ve komut dosyasının kendisinde veya komut dosyası kaynaklarını özel amaçlı bir yapılandırma dosyasında uygun bir PATH güncellemesini sabit kodlamak çok daha iyidir. Bu da durumlarda nerede çalıştığını bu olmaz - f / e, /etc/profile.dyerine ~/.bashrcgeçerlidir.
Charles Duffy

hardcoding özellikle karışık işletim sistemi / sürüm ortamlarında neredeyse taşınabilir değildir; etkileşimli yapılandırma / kaynak dosyalarını ve özel olarak oluşturulmuş kaynak / yapılandırma dosyalarını kullanma konusunda ... bu daha çok geliştiricilerin ortamı yazma / bakımını temel alan kişisel bir seçim sorunudur; Son 20 yılda hiçbir sıfır sorun yaşadım ... üretim ortamlarında ... tüm kodlama ortamında ortak bir kaynak / yapılandırma dosyası kullanarak, ymmv
-

1
Bir kullanıcının etkileşimli dosyalarında noktalama da taşınabilir değildir (özellikle hangi içeriğin hangi dosyalar tarafından yapıldığı dağıtımların nasıl dengelendiği göz önüne alındığında - bazıları geleneksel şekilde şeyler yapıyor ve .profilebazıları PAM'dan bazı ortam değişkenlerini .bash_profilekullanıyor /etc/profile.d, kullanıyor , kullanıyor . Öyle ya da böyle, taşınamayan bir şey yapıyorsun. En azından PATH=$PATH:/whatever/specific/locationsabit kodlama ayarlarda değişiklik yapıyor ve davranışı okuyucular için daha açık (daha sonra değişip değişmeyeceği konusunda endişelenmesi gerekmeyen).
Charles Duffy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.