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
相关产品推荐
相关产品推荐

