找不到 Synology Scheduler .sh java 命令

pig*_*guy 10 java bash synology

我有一个 bash 脚本,唯一的任务是执行 jar 文件。

短信

java -jar /volume1/homes/jar/smssender.jar
Run Code Online (Sandbox Code Playgroud)

我使用 Synology NAS 设置了一项任务。

由 root 运行的任务设置

添加执行bash脚本的命令。添加日志输出。

在此处输入图片说明

执行我的新任务。

在此处输入图片说明

查看日志,看到如下错误:

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

检查 Java 版本/安装:

在此处输入图片说明

手动检查 sh 脚本的执行(工作):

在此处输入图片说明

有同样奇怪案例的人吗?任何解决方法/想法?

我试过

  • 重新启动我的 NAS
  • 卸载/安装 Java8 包

但没有一个工作。

Sub*_*mal 7

当 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
Run Code Online (Sandbox Code Playgroud)

正如已经给出的评论中所述,不建议采购用于交互式 shell 的配置文件脚本。您可以在/etc/profile脚本中模仿脚本的行为sms.sh来设置 CLASSPATH PATH JAVA_HOME LANG。

在这种特定情况下,关于在脚本中硬编码路径以及由此导致的可移植性降低的提出的观点可能具有情人优先权。