You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CRON任务实现向日志文件添加时间戳的方法咨询

解决方法:生成指定格式的日志文件

看起来你想要生成每行带DD/MM/YYYY - HH:MM:SS : 状态格式的日志,目前的脚本还差一点完善,我给你几个可行的方案:

方案1:完善你的datetime.sh脚本

你的datetime.sh没写完,把它改成这样就能正确给每行输出加上时间戳了:

#!/bin/bash
while read -r line; do
  echo "$(date +'%d/%m/%Y - %H:%M:%S') : $line"
done

然后你的原命令就可以正常工作了:

php -f /home/myrepo/Documents/CRON.php | /home/myrepo/Documents/datetime.sh > /home/myrepo/Documents/my_Log.log

解释一下:

  • read -r line安全读取输入的每一行(这里你的PHP脚本输出一行"ok",所以会处理一次)
  • date +'%d/%m/%Y - %H:%M:%S'生成你要的日期时间格式,用单引号包裹格式字符串避免转义问题
  • 把时间和读取到的状态拼接后输出,重定向到日志文件

方案2:不用单独的shell脚本,直接在命令行处理

如果不想维护额外的shell脚本,也可以直接用awk或者直接拼接,更简洁:

php -f /home/myrepo/Documents/CRON.php | awk -v dt="$(date +'%d/%m/%Y - %H:%M:%S')" '{print dt " : " $0}' > /home/myrepo/Documents/my_Log.log

或者用更简单的命令拼接:

echo "$(date +'%d/%m/%Y - %H:%M:%S') : $(php -f /home/myrepo/Documents/CRON.php)" >> /home/myrepo/Documents/my_Log.log

这里提醒下:如果是定时任务调用,想要追加日志而不是覆盖旧内容,记得用>>代替>,这样不会清空之前的日志。

方案3:直接在PHP脚本里输出完整日志行

最省心的方式是让PHP脚本自己生成带时间戳的内容,不需要额外shell处理:

<?php
// 这里可以根据业务逻辑动态设置状态为ok或ko
$status = "ok";
$datetime = date('d/m/Y - H:i:s');
echo "$datetime : $status\n";
?>

然后运行命令时直接重定向输出即可:

php -f /home/myrepo/Documents/CRON.php >> /home/myrepo/Documents/my_Log.log

这个方案把所有逻辑整合在PHP里,后续维护起来更方便。

如果你的脚本是被crontab定时调用的,记得在crontab配置里写全文件的绝对路径,避免出现找不到文件的问题。

内容的提问来源于stack exchange,提问作者moonshine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:11:09