[英]Synology Scheduler .sh java command not found
我有一個 bash 腳本,唯一的任務是執行 jar 文件。
短信
java -jar /volume1/homes/jar/smssender.jar
我使用 Synology NAS 設置了一項任務。
添加執行bash腳本的命令。 添加日志輸出。
執行我的新任務。
查看日志,看到如下錯誤:
/volume1/homes/jar/sms.sh: line 1: java: command not found
檢查 Java 版本/安裝:
手動檢查 sh 腳本的執行(工作):
有同樣奇怪案例的人嗎? 任何解決方法/想法?
我試過
但沒有一個工作。
當 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.