pig*_*guy 10 java bash synology
我有一个 bash 脚本,唯一的任务是执行 jar 文件。
短信
java -jar /volume1/homes/jar/smssender.jar
Run Code Online (Sandbox Code Playgroud)
我使用 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
Run Code Online (Sandbox Code Playgroud)
正如已经给出的评论中所述,不建议采购用于交互式 shell 的配置文件脚本。您可以在/etc/profile
脚本中模仿脚本的行为sms.sh
来设置 CLASSPATH PATH JAVA_HOME LANG。
在这种特定情况下,关于在脚本中硬编码路径以及由此导致的可移植性降低的提出的观点可能具有情人优先权。