如何在cron调用wget的日志中为每条记录添加换行?
解决Cron任务日志记录同行的问题
当然可以通过修改cron命令参数解决这个问题!核心原因是你当前的命令只是把网页返回的JSON内容直接追加到日志里,但服务器返回的JSON末尾没有自带换行符,导致每次执行的结果都挤在同一行。
这里有几个简单的修改方案,帮你实现每条记录单独占一行:
方案一:追加换行符到日志
修改你的cron任务行如下:
0 0 * * * (wget -t 1 - "http://urlto.job/job9" -O -; echo) >> /home/password_reset_log.txt
改动说明:
- 用括号把
wget和echo命令包裹成一个子shell,确保两个命令的输出都会被定向到日志文件 echo命令会自动输出一个换行符,不管wget执行成功还是失败,都会在当前执行的JSON记录后面加上换行,把下一次的结果隔开- 把
home/password_reset_log.txt改成了绝对路径/home/password_reset_log.txt(如果你的日志文件实际位置不同,记得调整),避免cron执行时因为默认工作目录问题找不到文件
方案二:用printf格式化输出
如果你想更严谨地控制输出格式,可以用printf来确保每条记录末尾都有换行:
0 0 * * * printf "%s\n" "$(wget -t 1 - "http://urlto.job/job9" -O - 2>/dev/null)" >> /home/password_reset_log.txt
改动说明:
$(wget ...)会捕获网页返回的内容,printf "%s\n"会在内容末尾添加一个换行符再输出2>/dev/null用来屏蔽wget本身的错误信息(比如连接超时的提示),如果你需要保留这些信息,可以去掉这个部分
额外提示
如果你有权限修改网页端的作业,可以让它返回的JSON响应末尾自带一个换行符,这样不用修改cron命令也能解决问题。但如果没法改服务器,上面的cron命令修改方案就完全够用了。
内容的提问来源于stack exchange,提问作者Mr Dansk
相关产品推荐
相关产品推荐

