Linux 滚动外壳脚本
假设一个shell脚本(commands.sh)包含很少的命令 我需要编写一个脚本,将commands.sh执行的命令输出发送到文件f1.csv 如果文件大小超过1MB,则输出流应转到文件f2.csv 如果此处的文件大小再次超过1 mb,则输出流应转到文件f3.csv 如果f3.csv的大小超过1mb,则应删除旧的f1,并再次创建新文件f1, 输出流应写入f1。这个过程应该继续下去 我可以编写crontab文件,只是shell脚本有点棘手 我一直在试验:Linux 滚动外壳脚本,linux,bash,shell,unix,terminal,Linux,Bash,Shell,Unix,Terminal,假设一个shell脚本(commands.sh)包含很少的命令 我需要编写一个脚本,将commands.sh执行的命令输出发送到文件f1.csv 如果文件大小超过1MB,则输出流应转到文件f2.csv 如果此处的文件大小再次超过1 mb,则输出流应转到文件f3.csv 如果f3.csv的大小超过1mb,则应删除旧的f1,并再次创建新文件f1, 输出流应写入f1。这个过程应该继续下去 我可以编写crontab文件,只是shell脚本有点棘手 我一直在试验: #!/usr/bin/env bash
#!/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开始
谢谢听起来您最好使用logrotate,这取决于脚本的运行方式。如果您在cron上运行'commands.sh',则可以让logrotate转出日志。这里有一个很好的logrotate指南: 如果commands.sh不在cron上,这意味着触发它的时间间隔不是固定的,那么可以在脚本开始时手动设置日志循环。我曾经做过类似的事情。我发现这本指南非常有用:
如何使用
logrotate
?您好,但我不允许使用logrotate。我们可以有一个shell脚本解决方案吗?我提供的第二个链接是在脚本开始时实现自己的日志循环的一种方法。我会说用那个。当脚本运行时,第一个代码段应该是日志循环,然后它执行脚本应该执行的正常工作。这样,每次运行脚本时都会旋转日志。