我有一个执行java程序的脚本,我想创建一个服务来在启动时启动该脚本。
所以我创建了一个名为 run.sh 的脚本。
/测试/运行.sh
#!/bin/bash
java -cp myjar:/test/lib/* com.xxxx.util.AmazonS3FileDownloader
我还创建了一个名为的test
文件/etc/init.d
/etc/init.d/测试
#!/bin/bash
/test/run.sh
出于测试目的,我授予测试文件夹/test
所有权限(chmod 777 /test)。
drwxrwxrwx 7 testuser testuser 4096 Dec 12 13:28 test
这就是/etc/ini.d
文件夹内的内容
-rwxr-xr-x 1 root root 2062 Dec 12 13:18 test
如果我运行这个命令。一切安好。没有错误,程序运行正常。
$ /test/run.sh
但出于某种原因,如果我尝试做同样的事情但使用该服务,我会忽略。它不起作用。
$ service test start
receipts_download.log
创建in文件夹时我的权限被拒绝/test
。
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: receipts_download.log (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:142)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:290)
at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:194)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:164)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:133)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:97)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:689)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:544)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:440)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:476)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:125)
at org.apache.log4j.Logger.getLogger(Logger.java:118)
at com.xxxxx.util.AmazonS3FileDownloader.<init>(Unknown Source)
at com.xxxxx.util.AmazonS3FileDownloader.main(Unknown Source)
/test
拥有所有权限以及为什么我可以$ /test/run.sh
毫无问题地运行但不能$ service test start
感谢您的帮助。
答案1
看起来脚本正在创建“receipts_download.log”文件,cwd
而cwd
运行脚本时却没有创建“receipts_download.log”文件/test
。请cd /test
在运行脚本之前,它会正常运行。
答案2
差异很可能在于环境变量和当前工作目录。从干净的环境service
开始脚本。/
因此,您可能需要检查您的环境和当前工作目录(借助export
、pwd
或set
命令)并将缺少的先决条件添加到脚本中。