假设shell脚本(commands.sh)包含很少的命令。
我需要编写一个脚本,将command.sh执行的命令输出发送到文件f1.csv 如果文件大小超过1MB,则输出的流量应该转到文件f2.csv 如果此处文件大小再次超过1 mb,则输出的流量应转到文件f3.csv 如果f3.csv超过1mb的大小,则应删除旧的f1并再次创建新的文件f1, 输出流应该写入f1。这个过程应该继续。
我可以编写crontab文件,只是shell脚本有点棘手
我一直在尝试:
#!/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开始重置。
感谢
答案 0 :(得分:2)
听起来您最好使用logrotate,具体取决于脚本的运行方式。如果您正在运行' commands.sh'在cron上,你可以使用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