假设shell脚本(commands.sh)只有很少的命令。
我需要写一个脚本,发送由commands.sh执行的命令的输出到文件f1.csv如果文件大小超过1mb,那么输出流应该去文件f2.csv如果文件大小再次超过1MB这里,输出流应该去文件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开始。
谢谢
发布于 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
https://stackoverflow.com/questions/22842378
复制相似问题