【问题标题】:Write LogFile with date on running service在运行服务上写入带有日期的日志文件
【发布时间】:2016-02-29 10:16:01
【问题描述】:

我用 reactphp 创建了一个服务,它运行并做了一些事情。它作为守护进程启动,因此所有输出都应记录在文件中。 此日志文件应命名为 'foo-log-file-$(date "+F")'。我想每天都有一个日志文件。

问题:

如前所述,脚本作为服务运行,不会停止。因此,脚本的起始调用只进行一次。

php my_script.php >> /var/log/bar/log-file--$(date "+%F") 2>&1

因此,从该脚本打印到控制台的所有内容都会保存到文件中,但该文件仅在调用时使用日期字符串创建,并且不会使用新日期更新。

问题:

是否可以在不写日志逻辑的情况下解决这个问题?我可以用 bash 处理这个要求吗?

【问题讨论】:

  • 您可以为此运行一个 cronjob,例如每天运行。
  • @fedorqui “cronjob”到底是什么意思,守护进程的启动只有一次,那么这个 cronjob 究竟应该做什么?
  • 嗯,我没有正确理解这个问题。现在我看到:启动应用程序时会生成日志文件名。然后,您希望每天更改此文件。为此,您可能需要使用rotate。它会在某些情况下自动移动日志,以便您可以在第二天的 00 点“移动”一个。

标签: php linux bash logging reactphp


【解决方案1】:

仅供参考 @fedorqui 的答案是一个好方法,我用一个 cronjob 解决了它,它将文件复制到另一个文件并清空其余文件。 您不能使用移动,导致通过正在运行的服务,它一直处于打开状态并且您收到错误:

cannot move 'foo.log' to 'bar.log': Text file busy

所以我 cp 它并清除旧的:

cp foo.log foo.log.$(date +"%F");
cp /dev/null file.log;

【讨论】:

  • 不错!请注意,您也可以说 > file 将其清空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多