我有一个无法修改的程序,该程序被硬编码为写入位于的日志文件/tmp/myprogram.log
。
我需要能够在同一台服务器上以不同的用户身份运行此程序的多个副本。因此我需要将日志文件分离出来。
我尝试将其更改/tmp/myprogram.log
为指向的符号链接,认为~/myprogram.log
这意味着程序会将日志写入程序以任何用户身份运行的用户目录中,但不幸的是,这是扩展的 shell,因此~
不起作用。
答案1
我会研究获取你的程序源代码并对其进行更改。 我会写一行字。你甚至可以在这里发布那一行字,我们可以帮忙修改。
不过,其他人建议的 chroot 也可以起作用。
这是关于欺骗你的程序写入不同的文件...我无法编译它,但想法和讨论就在那里。
https://unix.stackexchange.com/questions/211394/redirect-a-file-descriptor-before-execution
答案2
如果您发布执行日志记录的代码,人们可以在这里提供帮助。
因为如果使用记录器,您可以通过指定的参数获得配置文件或某些应用程序名称,基本上某些名称会为这些多个实例使用不同的名称。
下一步将用此字符串标记记录器并将其转发到自定义频道(如“local4”)。为了进行测试,您可以通过调用命令记录一些消息logger -p local4.info -t "YourTAG" "Log message"
为了完成设置 rsyslog 来捕获这些标签/etc/rsyslog.d/your.conf
:
:syslogtag,contains,"<YourTAG>" -/path/to/name1.log & stop :syslogtag,contains,"<AnotherTAG>" -/path/to/name2.log & stop . local4.* -/path/to/some.log # This will catch all tags which would't be mentioned before. & stop