38

我正在编写一个新的守护进程,它将托管在 Debian Linux 上。

我发现 /var/log 只有 root 写权限,所以我的守护进程不能在那里写日志文件。

但是,如果它在那里写入,它似乎将获得自动日志轮换,并且还可以像用户期望的那样工作。

守护进程写入出现在 /var/log 中的日志条目而不必以 root 身份运行的推荐方法是什么?

守护进程是一个网络服务器,因此日志流量将类似于 Apache。

4

4 回答 4

47

您应该创建一个子目录,例如/var/log/mydaemon拥有守护程序的用户所有权

于 2009-01-27T15:19:29.360 回答
16

以 root 身份在此处创建一个日志文件并将文件所有者更改为网络服务器用户:

# touch /var/log/myserver.log
# chown wwwuser /var/log/myserver.log

如果以用户身份运行,则服务器可以写入文件wwwuser。但是,它不会获得自动日志轮换。您必须将日志文件添加到/etc/logrotate.conf/etc/logrotate.d/...让您的服务器在logrotate发出信号时重新打开日志文件。

syslog如果更适合您的场景,您也可以用于日志记录。

于 2009-01-27T15:25:11.283 回答
3

两种选择:

  1. 以 开头root,打开文件,然后使用 删除权限setuid。(我不记得删除权限的确切系统调用。)如果你想绑定到 TCP 端口 80 或低于 1024 的任何端口,无论如何你都必须这样做。
  2. 正如WiseTechi 所说,创建一个像 /var/log/mydaemon 这样具有守护进程用户所有权的子目录。

下的文件/var/log不会自动旋转;相反,旋转由/etc/logrotate.conf和 下的文件控制/etc/logrotate.d

于 2009-01-27T15:25:59.800 回答
2

使用“记录器”命令

http://linux.die.net/man/1/logger

于 2012-05-24T10:13:51.153 回答