簡體   English   中英

找不到 Synology Scheduler .sh java 命令

[英]Synology Scheduler .sh java command not found

我有一個 bash 腳本,唯一的任務是執行 jar 文件。

短信

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

我使用 Synology NAS 設置了一項任務。

由 root 運行的任務設置

添加執行bash腳本的命令。 添加日志輸出。

在此處輸入圖片說明

執行我的新任務。

在此處輸入圖片說明

查看日志,看到如下錯誤:

/volume1/homes/jar/sms.sh: line 1: java: command not found

檢查 Java 版本/安裝:

在此處輸入圖片說明

手動檢查 sh 腳本的執行(工作):

在此處輸入圖片說明

有同樣奇怪案例的人嗎? 任何解決方法/想法?

我試過

  • 重新啟動我的 NAS
  • 卸載/安裝 Java8 包

但沒有一個工作。

當 Synology 任務調度程序執行腳本sms.sh ,PATH 設置取自腳本/etc/crontab 其中不包含 Java 路徑。

默認登錄 shell 環境定義為 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

正如已經給出的評論中所述,不建議采購用於交互式 shell 的配置文件腳本。 您可以在sms.sh腳本中模仿/etc/profile腳本的行為來設置 CLASSPATH PATH JAVA_HOME LANG。

在這種特定情況下,關於在腳本中硬編碼路徑以及由此導致的可移植性降低的提出的觀點可能具有情人優先權。

我不熟悉Synology所以fwiw ...

shell 腳本在命令行執行時可以工作,因為特定的登錄會話已經加載了一組環境變量(例如,在登錄主目錄中的.profile/.bashrc腳本時,以及各種 java-加載了特定的環境變量 - PATH, JAVA_HOME, CLASSPATH等),允許java和腳本毫無問題地運行。

Synology作業失敗錯誤表示尚未加載特定於 java 的環境變量,因此作業/腳本無法定位java

假設Synology沒有規定預加載登錄配置文件的配置設置/標志,“簡單”的解決方案是編輯腳本( sms.sh )並在執行任何操作(例如, 調用java )。 一個簡單的例子:

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

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

java ...

注意事項

  • root替換為運行腳本的登錄名(在示例Synology圖像中,您似乎選擇了root用戶,因此我的示例引用了~root
  • ~root/.bashrc替換為用戶配置文件的路徑,以便預加載允許腳本查找java所需的環境變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM