Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在运行服务时写入带有日期的日志文件_Php_Linux_Bash_Logging_Reactphp - Fatal编程技术网

Php 在运行服务时写入带有日期的日志文件

Php 在运行服务时写入带有日期的日志文件,php,linux,bash,logging,reactphp,Php,Linux,Bash,Logging,Reactphp,我用reactphp创建了一个服务,它运行并做一些事情。它作为守护进程启动,因此所有输出都应记录在一个文件中。 此日志文件应命名为'foo-log-file-$(日期“+F”)”。我希望每天都有一个日志文件 问题: 如前所述,脚本作为服务运行,不会停止。因此,脚本的起始调用只执行一次 php my_script.php >> /var/log/bar/log-file--$(date "+%F") 2>&1 因此,从该脚本打印到控制台的所有内容都会保存到该文件中,但该

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

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

php my_script.php >> /var/log/bar/log-file--$(date "+%F") 2>&1
因此,从该脚本打印到控制台的所有内容都会保存到该文件中,但该文件仅在调用时使用日期字符串创建,不会使用新日期更新

问题: 不在php脚本中编写日志逻辑就可以解决这个问题吗?我可以用bash处理这个需求吗?

FYI @fedorqui的答案是一个很好的方法,我用cronjob解决了这个问题,它将文件复制到另一个文件,并清空其余的文件。 您无法使用move,因为通过正在运行的服务,它一直处于打开状态,您会收到以下错误:

cannot move 'foo.log' to 'bar.log': Text file busy
因此,我使用以下方法对其进行cp并清除旧的:

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

您可能可以为此运行一个cronjob,例如每天运行。@fedorqui“cronjob”的确切含义是什么,守护进程只启动一次,那么这个cronjob到底应该做什么?嗯,我没有正确理解这个问题。现在我明白了:日志文件名是在启动应用程序时生成的。然后,您希望每天更改此文件。为此,您可能需要使用。在某些情况下,它会自动移动日志,以便您可以在第二天的00点“移动”一个日志。很好!注意:您也可以说
>file
将其清空。