首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滚动shell脚本

滚动shell脚本
EN

Stack Overflow用户
提问于 2014-04-03 23:33:23
回答 1查看 1.1K关注 0票数 1

假设shell脚本(commands.sh)只有很少的命令。

我需要写一个脚本,发送由commands.sh执行的命令的输出到文件f1.csv如果文件大小超过1mb,那么输出流应该去文件f2.csv如果文件大小再次超过1MB这里,输出流应该去文件f3.csv如果f3.csv超过大小1MB,那么旧的f1应该被删除,并再次创建新的文件f1,输出流应该写入到f1。这个过程应该继续下去。

我可以编写crontab文件,只是shell脚本有点棘手

我一直在尝试:

代码语言:javascript
复制
#!/usr/bin/env bash

PREFIX="f"
# Maximum size after which you want a new file in bytes
MAX_SIZE=1048576
LAST_FILE=`ls "$prefix"*.csv | tail -1`
# Check if file exists and if it does not, create it.
if [[ -z "$LAST_FILE" ]]
  then
  LAST_FILE=$PREFIX"1.csv"
  touch $LAST_FILE
fi
LAST_FILE_NO=`echo $LAST_FILE | sed s/$PREFIX/''/ | sed s/.csv/''/`
LAST_FILE_SIZE=`stat -c %s $LAST_FILE`


if [ `stat -c %s $LAST_FILE` -lt 200 ]
  then
     `/bin/sh ./sam.sh >> $LAST_FILE`
  else
    UPCOMING_FILE_NO=$((LAST_FILE_NO+1))
    `/bin/sh ./sam.sh >> $PREFIX$UPCOMING_FILE_NO.csv`
fi

帮助是感激的,伙计们。

编辑:我也让第二个shell脚本工作了……现在,如果有人可以帮助我重置后,3个文件完成,并从f1开始。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-04-04 00:26:58

听起来你最好使用logrotate,这取决于你的脚本是如何运行的。如果你在cron上运行'commands.sh‘,你可以让logrotate轮换出日志。这里有一个关于logrotate的好指南:http://linuxers.org/howto/howto-use-logrotate-manage-log-files

如果您的commands.sh不会在cron上,这意味着触发它的不是常规的时间间隔,那么您可以在脚本的开头手动设置日志轮换。我曾经做过类似的事情。我发现这个指南真的很有用:

http://wazem.blogspot.com/2013/11/simple-bash-log-rotate-function.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22842378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档