arm linux logrotate,嵌入式系统移植cron和logrotate实现软件日志记录功能
在嵌入式Linux中实现软件的日志记录功能,方便日后对软件进行跟踪调试。使用logrotate日志滚动功能可以防止日志文件越来越大而影响系统存储空间。logrotate的定期运行,需要借助cron工具,所以要先移植cron。环境介绍:1、电脑端系统:Ubuntu14.042、嵌入式系统:TI_SDK-08编译出来的。。3、嵌入式硬件:BBB板过程详述如下:1、下载vixie-cron源码,gith
在嵌入式Linux中实现软件的日志记录功能,方便日后对软件进行跟踪调试。使用logrotate日志滚动功能可以防止日志文件越来越大而影响系统存储空间。
logrotate的定期运行,需要借助cron工具,所以要先移植cron。
环境介绍:
1、电脑端系统:Ubuntu14.04
2、嵌入式系统:TI_SDK-08编译出来的。。
3、嵌入式硬件:BBB板
过程详述如下:
1、下载vixie-cron源码,github或者其他什么地方都行。
2、解压,查看里面安装说明,因为我已经安装并测试通过了,所以先不详述这部分步骤了,下次再移植时会补充的,
最后make install会得到两个执行文件:cron和crontab
现在据我的了解,crontab是创建定期任务的程序,cron是负责运行定期任务的程序。
这两个命令的具体用法可以百度,很多。
3、将cron和crontab放到BBB板/usr/bin目录下,先做个测试,验证是否移植成功(确定自己做的没问题
可跳过下面小步骤):
1) 进入/etc目录,新建文件夹:mkdir cronConfig,之后进入:cd cronConfig
2)新建文件:vi test.crontab,输入如下内容并保存:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/bin:/usr/sbin
HOME=/
* * * * * /etc/cronConfig/test.sh 3)新建文件:vi test.sh,输入如下内容并保存:
#/bin/sh
d=$(date)
cd /etc/cronConfig
touch "$d" 赋予执行权限:chmod +x test.sh
4) 执行 crontab test.crontab,之后执行crontab -l 可以看到刚刚加入的任务。
5)执行cron,等待1分钟后,查看文件:ls,可以看到多了一个以日期命令的文件,表明cron移植成功,
现在可以先把cron进程结束了,ps列出进程名,然后kill(cron的进程号),需要注意的是crontab创建的任务
运行时并不能得到shell的环境变量,这个很坑爹,要做些处理。
5、解压并进入源码目录,依次执行:
1)aclocal
2)autoconf
3)autoheader
4)automake --add-missing
5)touch NEWS README AUTHORS ChangeLog
6)automake --add-missing
7)./configure --prefix=/home/usrdir --host=arm-linux-gnueabihf
这一小步遇到了如下错误:

按照源码中的提示安装:
apt-get update
apt-get install make autoconf libtool libpopt-dev xz-utils
之后执行./configure貌似能通过,但是./configure --prefix=/home/usrdir --host=arm-linux-gnueabihf就不
行了,这个问题纠结了好久,其实后来解决方法很简单,一开始我就以为需要的这个popt库应该也是交叉
编译出来的库,所以下载了popt库的源码,交叉编译(方法先略过,下次再编译时补充上),然后将库和头
文件都放到了我的交叉编译工具链中,结果这样做之后,再去执行./configure --prefix=/home/usrdir
--host=arm-linux-gnueabihf还是同样的错误提示,又是各种百度,原来我只是将需要的文件都编译出来
了,但是上面的命令并不能找到库文件的位置,所以还需要执行如下语句:
export CFLAGS="-L交叉编译后的库文件的包含目录 -I交叉编译后的头文件的包含目录"
然后再执行./configure --prefix=/home/usrdir --host=arm-linux-gnueabihf
,顺利通过!
之后make,makeinstall都没有问题。。。。
6、将编译出来的文件复制到BBB板/usr/local相关目录下,然后进入BBB板系统,赋予logrotate执行权限,执
行logrotate,出现如下错误:

1)./configure --prefix=/home/usrdir --host=arm-linux-gnueabihf --libexecdir=/usr/lib --disable-static
2)make
3)make install install-dev install-libmake install install-dev install-lib
在/home/usrdir目录里就得到了编译出来的文件,复制到BBB板/usr/local相应的目录下。再执行logrotate,
能正确运行了。
7、logrotate的使用方法可百度,有很多,在这里只把我遇到的问题说一下,
1)一个是上面的cron,重提一下,它所执行的任务是不会得到shell的环境变量的,所以有些脚本明明在
shell下能好好运行,但是到了cron中就死活不动,那就应该是环境变量的问题了。
2)一个就是logrotate的问题了,我的日志文件是通过运行某个程序重定向进去的,比如command>1.txt,
当logrotate切割日志后,新生成的1.txt开头会插入很多0x00的16进制数,很多,导致1.txt还是随时间的
原来create和copytruncate是两种日志切割的方案,而且copytruncate得机制导致了分割后日志文件会多
出很多0x00,后来的解决办法很简单,将command>1.txt改为command>>1.txt就好了。。。。
不知道为什么一开始没用>>。。。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)