我正在创建一个简单的日志文件,其中包含日期/时间以及负责确定操作的用户。我所做的与我想从 java Servlet 运行 Shelscript(即 shellscript.sh)时通常所做的相同:
ProcessBuilder pl = new ProcessBuilder("/usr/bin/bash", "-c", "echo ($date) \" - Action_Name - " + User + "\" >> " + "myDirectory/logs/myLog.log");
pl.start();
我单独使用这两个命令,但是执行它们后,我在 myDirectory/logs/myLog.log
中看不到任何内容.
为什么这段代码不起作用?
最佳答案
发生这种情况是因为您在表示 $(date)
时意外指定了 ($date)
,因此 bash 提示语法错误并且没有执行该命令。你想要这个:
ProcessBuilder pl = new ProcessBuilder("/usr/bin/bash", "-c", "echo $(date) \" - Action_Name - " + User + "\" >> " + "myDirectory/logs/myLog.log");
pl.start();
如果您检查进程返回代码或打印其错误输出,您可以看到失败。如果您想以编程方式确定命令是否失败,请检查返回代码。
但是就像 Qwerky 在评论中提到的那样,头脑确实令人难以置信。
关于java - 从 JSP/Servlet 编写简单日志到 UNIX/Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18213419/