linuxscreen打印日志


需求:公司某后台程序是在screen下执行的,只能通过恢复到窗口进行查看并且无法查看全部信息;由于更新后台程序后需要重启后台,通过查看后台程序的执行过程来判断此次更新是否成功,现需要将后台程序的screen运行信息打印到日志,并提供给开发者调试。

实现思路:1.将screen日志输出到某文件,并给开发者开通读文件权限;

2.将日志名称加上时间,以通过日志名称就可轻易辨认后台是否重启成功;

3.每次重启后台都要将原日志删除,以便节省空间并重新生成带有时间的日志名

实现过程:

要点:1.更改screen配置文件/etc/screenrc 在最后加上一行logfile /root/screenlog/%t-20140905-163549.log

2.启动screen命令 需要加上相关参数

/usr/bin/screen -L -t aa1-dmS aa1 ./aa1

这里我一脚本的方式实现,日志文件名字会根据时间生成。

#!/bin/bash
export LANG=zh_CN.UTF-8
declare -i port
killall screen
rm -rf /root/screenlog/*.log
echo "logfile /root/screenlog/%t-`date +%Y%m%d-%H%M%S`.log" >> /opt/sjzq/screenrc_temp
\cp -rf /opt/sjzq/screenrc_temp /etc/screenrc
for i in `seq 1 6`
do
        n=`pgrep aa$i |wc -l`
        if [ $n -eq 0 ];then
                cd /fb$i
                /usr/bin/screen -L -t aa$i -dmS aa$i ./aa$i >/dev/null 2&1
        fi
done
sed -i '$d' /opt/sjzq/screenrc_temp

每次执行guard1.sh,会重启screen,我们看到会在/root/screenlog下生成以会话名称+时间组合而成的日志,这样根据时间我们可以判断日志重启,并能够查看相关日志了.
[root@localhost sjzq]# bash guard1.sh 
[root@localhost sjzq]# ls /root/screenlog/
aa1-20140905-165056.log  aa2-20140905-165056.log  aa3-20140905-165056.log  aa4-20140905-165056.log  aa5-20140905-165056.log  aa6-20140905-165056.log
[root@localhost sjzq]# bash guard1.sh
[root@localhost sjzq]# ls /root/screenlog/
aa1-20140905-165127.log  aa2-20140905-165127.log  aa3-20140905-165127.log  aa4-20140905-165127.log  aa5-20140905-165127.log  aa6-20140905-165127.log


相关内容