从java调用journalctl

从java调用journalctl,第1张

概述从java调用journalctl

当我在Centos 7 linuxterminal中以root用户身份运行以下命令时,它会产生57行输出:

journalctl --output=Json-pretty UNIT=firewalld.service

那么,如何改变下面的代码来成功从Java调用这个代码,而不必将密码保留在文件中呢?

这是我的尝试。 当我执行下面的代码时,控制台只输出exit: 1 :

String s; Process p; try { p = Runtime.getRuntime().exec("journalctl --output=Json-pretty UNIT=firewalld.service"); BufferedReader br = new BufferedReader(new inputStreamReader(p.getinputStream())); while ((s = br.readline()) != null) System.out.println("line: " + s); p.waitFor(); System.out.println ("exit: " + p.exitValue()); p.destroy(); } catch (Exception e) {}

编辑:

linux ps命令 – 获取进程运行时间 – etime和time参数不同

添加一个斜杠mod_rewrite

libMysqLclIEnt.so.15:无法打开共享对象文件:没有这样的文件或目录

来自EPEL的Amazon linux上的Clang找不到C ++头文件或库

使用vagrant来提供简单的MysqL设置(使用shellconfiguration程序)

当我添加以下内容:

BufferedReader br2 = new BufferedReader(new inputStreamReader(p.getErrorStream())); while ((s = br2.readline()) != null) System.out.println("error line: " + s);

以下输出生成:

error line: No journal files were found. error line: Failed to get realtime timestamp: Cannot assign requested address

问题与权限有关吗? 当我从linuxterminal运行journalctl --output=Json-pretty UNIT=firewalld.service作为root ,我得到了57行输出。 但是当我运行journalctl --output=Json-pretty UNIT=firewalld.service作为普通用户时,terminal告诉我没有find文件。 我不想把我的root密码放在java代码中。 有没有其他的方式来调用journalctl从Java而不必离开系统的根密码在一个文件?

百胜安装通过其他服务器

Djangopipe理file upload中的“连接重置”错误

CentOS和Fontconfig:无法加载默认configuration文件

从Centos中拉出图片(最新)时出错,需要valIDation

手动修补传统服务器上的Ghost漏洞

尽管journalctl的手册页告诉你,添加一个用户到systemd-journal应该允许他们访问所有的日志,这在CentOS 7上是行不通的。我最初是这样做的:

chmod +s /usr/bin/journalctl

但是,这使得每个人都可以访问期刊,这可能不是你想要的 。

正如@RealSkeptic指出, systemd-journald.service的man页表明可以赋予群组额外的访问权限以读取日志(并且指出向systemd-journal添加用户应该足够了)。 结合这些信息,你可以做到

sudo setfacl -Rnm g:systemd-journal:rx,d:g:systemd-journal:rx /run/log/journal/

然后,根据手册页将用户添加到systemd-journal组,足以允许访问日记帐:

sudo usermod -a -G systemd-journal your_user_name

您可以使用usermod -a -G systemd-journal <username>将您的(普通)用户添加到组systemd-journal 。 注销并登录,以使更改生效。 这使您的用户可以访问系统日志文件,而不必为其提供完整的root权限。

对于不同的 *** 作系统设置,组可能会有所不同。 您可以通过使用ls -l /var/log/journal/或ls -l /run/systemd/journal/ if /var/log/journal/不存在来简单地查看日志文件所属的组。

我已经在CentOS liveCD中试过这个,并且文件所属的组是root 。 所以你可以将用户添加到组root ,这不同于给它完全的根权限。

不过,我认为更好的办法是在日志文件上设置ACL以允许特定的组访问它们,因为root组可能访问得太多了。 systemd-journald.service的手册给出了这个ACL修改命令的示例,该命令授予读取wheel和日志的访问权限:

setfacl -Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx /var/log/journal/

总结

以上是内存溢出为你收集整理的从java调用journalctl全部内容,希望文章能够帮你解决从java调用journalctl所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1154641.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存