java - 从 JSP/Servlet 编写简单日志到 UNIX/Shell 脚本

标签 java bash unix servlets logging

我正在创建一个简单的日志文件,其中包含日期/时间以及负责确定操作的用户。我所做的与我想从 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/

相关文章:

bash - 在 bash 脚本中运行 vi 并执行 vi 命令来编辑另一个文件

linux - 如何获取unix数据文件中每行的前n个字符

linux - 在 unix 中并行运行多个命令

Java 如何创建唯一的对象名称?

bash - 可以在 bash if 语句中使用调用 "test"的函数吗?

java - 无法在 JPanel 上设置 JLabel 的位置

bash - 使用 join 进行笛卡尔积

java - 使用 Java 在 UNIX 上获取计算机 IP 的安全方法

Java泛型设计问题

java - 如果 react 中包含空格,则无法搜索名称