需求:公司某后台程序是在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下生成以会话名称+时间组合而成的日志,这样根据时间我们可以判断日志重启,并能够查看相关日志了.
[[email protected] sjzq]# bash guard1.sh [[email protected] 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 [[email protected] sjzq]# bash guard1.sh [[email protected] 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
时间: 2024-10-13 19:01:20