免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: liujuejun
打印 上一主题 下一主题

帮个忙,怎么自动检测文件更新,并做打印 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-03-24 18:07 |只看该作者
tail -f prt.log|xargs -l1 prtfile1 & 不行啊
我试了下tail -f prt.log|prtfile1 也不行
我的prtfile1() 有两个参数一个是文件名 filename 一个是端口号 Is_tty
prtfile1()我试了没有问题
tail -f prt.log|prtfile1 &
echo "file1.txt ttyp1" >>prt.log
echo "file2.txt ttyp2" >>prt.log
filename 和 Is_tty 都是空值
望高手指点

论坛徽章:
0
22 [报告]
发表于 2008-03-24 21:27 |只看该作者
tail -f 不实用,
我自己搞定了,自动备份文件,自动送空闲的打印机,经过测试,给大家参考(邮政代发农民补贴的有用)
需要建几个文件
WORKDWBH=dfgz/workdwbh
#DWBH单位编号 DWNAME 单位名称 XZBH乡镇编号 XZNMAE乡镇名 XZLEIBH发放类型编号 XZLEI
printf "43069042\t代发农民财政补贴\t001\t城郊乡\t003\t粮补\n" >workdwbh
REORTFILE=rpt${DWBH}
>prt43069042
PRTTTY=dfgz/log/prttty.log
#看你要增加多少端口
echo "tty01" >>prttty.log
DWFILE=dfgz/DWFILE.INI
printf "43069042\t430681016\t903021" >$DWFILE
正在要备份的报表文件在mid_sys/run/tmp/prj${单位编号}
找这行修改
#        REORTFILE=/mid_SYS/run/tmp/${REOTPFILE}

  1. #打印程序
  2. trap "" 2 3 15
  3. HOLD1=tmp/HOLD1.$$
  4. HOLD2=tmp/HOLD2.$$
  5. HOLD3=tmp/HOLD3.$$
  6. HOLD4=tmp/HOLD4.$$
  7. DWFILE=dfgz/DWFILE.INI
  8. PRTNOW=dfgz/log/prtnow.log
  9. PRTOVER=dfgz/log/prtover.log
  10. PRTLIST=dfgz/log/prtlist.log
  11. PRTTTY=dfgz/prtty.INI
  12. WORKDWBH=dfgz/workdwbh
  13. PRTNUM=dfgz/log/ttynum.log
  14. if [ ! -d "tmp" ];then
  15. mkdir tmp
  16. fi
  17. if [ ! -d "dfgz" ];then
  18. mkdir dfgz
  19. fi
  20. if [ ! -d "dfgz/log" ];then
  21. mkdir dfgz/log
  22. fi
  23. if [ ! -d "dfgz/backup" ];then
  24. mkdir dfgz/backup
  25. fi
  26. if [ ! -f $DWFILE ];then
  27. >$DWFILE
  28. fi
  29. if [ ! -f $PRTLIST ];then
  30. >$PRTLIST
  31. fi
  32. if [ ! -f $PRTNOW ];then
  33. >$PRTNOW
  34. fi
  35. if [ ! -f $PRTOVER ];then
  36. >$PRTOVER
  37. fi
  38. if [ ! -f $PRTTTY ];then
  39. >$PRTTTY
  40. fi
  41. if [ ! -f $PRTNUM ];then
  42. >$PRTNUM
  43. fi
  44. #检测记录唯一性
  45. check_duplicate()
  46. {
  47. _CODE=$1
  48. _DFILE=$2
  49. MATCH=`grep "^$_CODE" $_DFILE`
  50. #echo $_CODE
  51. if [ "$MATCH" = "" ];then
  52.         return 0
  53. else
  54.         return 1
  55. fi
  56. }
  57. #拷贝文件
  58. cpfile()
  59. {
  60. _CSFILE=$1
  61. _CDFILE=$2
  62. if [ -f $_CSFILE ];then
  63. cp $_CSFILE $_CDFILE
  64. return 0
  65. fi
  66. }
  67. #已经打印写入记录
  68. over_list()
  69. {
  70. _FLAGOVER=$1
  71. _T_TTY=$2
  72. _BACK_FILE2=$3
  73. if [ "$_FLAGOVER" = "w" ];then
  74.    printf "$_BACK_FILE2\t$DWBH\t$_T_TTY\n" >>$PRTOVER
  75.    grep -v "^$_T_TTY" $PRTNOW >>$HOLD2
  76.    mv $HOLD2 $PRTNOW
  77. fi
  78. }
  79. #文件是否相同
  80. diffile()
  81. {
  82. _DIFFILE1=$1
  83. _DIFFILE2=$2
  84. if [ -f "$_DIFFILE1" -a -f "$_DIFFILE2" ];then
  85. diff ${_DIFFILE1} ${_DIFFILE2} >$HOLD1
  86. if [ $? -ne 0 ];then
  87. return 0
  88. else
  89. return 1
  90. fi
  91. fi
  92. if [ "$_DIFFILE2" = "" ];then
  93. return 0
  94. fi
  95. if [ ! -f "$_DIFFILE1" ];then
  96. return 1
  97. fi
  98. rm $HOLD1
  99. }
  100. #备份文件并打印文件
  101. reportbackup()
  102. {
  103. REC=0
  104. while true
  105. do
  106. DWBH=`cat $WORKDWBH|awk '{print $1}'`
  107. DWNAME==`cat $WORKDWBH|awk '{print $2}'`
  108. XZBH=`cat $WORKDWBH|awk '{print $3}'`
  109. XZNAME=`cat $WORKDWBH|awk '{print $4}'`
  110. XZLEIBH=`cat $WORKDWBH|awk '{print $5}'`
  111. XZLEI=`cat $WORKDWBH|awk '{print $6}'`
  112. if ! check_duplicate $DWBH $DWFILE;then
  113.         REORTPFILE=prt${DWBH}
  114.         REORTFILE=$REORTPFILE
  115. #        REORTFILE=/mid_SYS/run/tmp/${REOTPFILE}
  116. LASTFILE=`awk '{if($2=='$DWBH') print $0}' $PRTLIST|tail -1|awk '{print $1}' 2>/dev/null`
  117. echo "正在检查最后一个打印文件$LASTFILE"
  118. echo "与现在的报表${REORTFILE}是否更新..."
  119. if diffile $REORTFILE $LASTFILE;then
  120. sleep 3
  121. DWNUM=`awk '{if($2=='$DWBH') print $0}' $PRTLIST|wc -l 2>/dev/null`
  122. XZNUM=`awk '{if($2=='$DWBH' && $4=='$XZBH') print $0}' $PRTLIST|awk '{if($6=='$XZLEIBH') print $0}'|wc -l 2>/dev/null`
  123.         DWNUM=`expr $DWNUM + 1 `
  124.         DWNUM=`expr $DWNUM + 1000 |cut -c2-4`
  125.         XZNUM=`expr $XZNUM + 1 `
  126.         XZNUM=`expr $XZNUM + 1000 |cut -c2-4`
  127.         BACKUPFILE=dfgz/backup/prt${XZLEIBH}_${DWBH}${DWNUM}_${XZBH}${XZNUM}
  128. echo "报表文件${REORTPFILE}为最新的文件备份为:"
  129. echo "打印文件$BACKUPFILE"
  130.         cpfile $REORTFILE $BACKUPFILE
  131. sleep 2
  132.         printf "$BACKUPFILE\t$DWBH\t$DWNAME\t$XZBH\t$XZNAME\t$XZLEIBH\t$XZLEi\t$XZNUM\n" >>$PRTLIST
  133. sleep 1
  134.         REC=`expr $REC + 1 `
  135. ttycheck
  136. echo "等待10秒继续检测最新文件"
  137. sleep 10
  138. else
  139. echo "没有新文件"
  140. echo "等待10秒继续检测最新文件"
  141. sleep 10
  142. fi
  143. fi
  144. done
  145. }
  146. #多打印端口检测,找空闲的打印机
  147. ttycheck()
  148. {
  149.         PRT_FLAG=1
  150.         TTY_LIST=`awk '{printf "%s ",$1}' $PRTTTY`
  151.         for IS_TTY in $TTY_LIST
  152.         do
  153.         PRT_TTY_FILE=dfgz/log/prt_${IS_TTY}_list.log
  154.         PRTMSG="${DWNAME}${XZBH}${XZNAME}第${XZNUM}份${XZLEI}文件."
  155.         if [ "$REC" = "1" ];then
  156.         grep -v "^$IS_TTY" $PRTNUM>$HOLD3 2>/dev/null
  157.         mv $HOLD3 $PRTNUM
  158.         printf "$IS_TTY\t0\n" >>$PRTNUM
  159.         fi
  160.         if [ "$PRT_FLAG" = "1" ];then
  161.         if check_duplicate $IS_TTY $PRTNOW;then
  162.         echo "发送第${REC}个打印文件到${IS_TTY}打印机\n信息:${PRTMSG}"
  163.         printf "$BACKUPFILE $IS_TTY $PRTMSG\n">>$PRT_TTY_FILE
  164.         printf "$IS_TTY\tBACKUPFILE\n" >>$PRTNOW
  165.         prttty $BACKUPFILE $IS_TTY $PRTMSG &
  166.         LIST_PRTNUM=`grep "^$IS_TTY" $PRTNUM|awk '{print $2}'`
  167.         grep -v "^$IS_TTY" $PRTNUM>$HOLD3 2>/dev/null
  168.         mv $HOLD3 $PRTNUM
  169.         PRT_NUM=`more $BACKUPFILE|wc -l`
  170.         PRT_NUM=`expr $PRT_NUM + $LIST_PRTNUM `
  171.         printf "$IS_TTY\t$PRT_NUM\n" >>$PRTNUM
  172.         PRT_FLAG=0
  173.         else
  174.         echo "${IS_TTY}打印机忙"
  175.         fi
  176.         fi
  177.         done
  178.         if [ "$PRT_FLAG" = "1" ];then
  179.         MINTTY=`sort +1n $PRTNUM|head -1|awk '{print $1}'`
  180.         PRT_TTY_FILE=dfgz/log/prt_${MINTTY}_list.log
  181.         echo "发送第${REC}个打印文件到作业量最小的${MINTTY}打印机\n信息:${PRTMSG}"
  182.         printf "$BACKUPFILE $MINTTY $PRTMSG\n" >>$PRT_TTY_FILE
  183.         printf "$IS_TTY\tBACKUPFILE\n" >>$PRTNOW
  184.         prttty $BACKUPFILE $MINTTY $PRTMSG &
  185.         LIST_PRTNUM=`grep "^$MINTTY" $PRTNUM|awk '{print $2}'`
  186.         grep -v "^$MINTTY" $PRTNUM>$HOLD3 2>/dev/null
  187.         mv $HOLD3 $PRTNUM
  188.         PRT_NUM=`more $BACKUPFILE|wc -l`
  189.         PRT_NUM=`expr $PRT_NUM + $LIST_PRTNUM `
  190.         printf "$MINTTY\t$PRT_NUM\n" >>$PRTNUM
  191.         PRT_FLAG=0
  192.         fi
  193. }
  194. #打印功能
  195. prtfile()
  196. {
  197. _PRTTEXT=$1
  198. _PRTMSG1=$2
  199. echo "^[[5i"
  200. printf "\n${_PRTMSG1}\n"
  201. cat $_PRTTEXT
  202. echo "^[[4i"
  203. }

  204. #打印到终端
  205. prttty()
  206. {
  207. _PRTFILE2=$1
  208. _MYTTY=$2
  209. _PRTMSG2=$3
  210. if [ "$_MYTTY" != "" -a -f "$_PRTFILE2" ];then
  211. sleep 20
  212. prtfile ${_PRTFILE2} ${_PRTMSG2} >/dev/${_MYTTY}
  213. echo "打印"
  214. over_list w $_MYTTY $_PRTFILE2
  215. else
  216. echo "文件${_PRTFILE2}端口${_MYTTY}\n信息${_PRTMSG2}"
  217. sleep 4
  218. echo "要打印的文件不存在,或者端口不存在"
  219. fi
  220. }
  221. clear
  222.         while true
  223.         do
  224.         echo ">>>1)启动打印后台      4)exit  \n"
  225.         echo -n ">>>请选择:"
  226.         read answer
  227.         clear
  228.    case  $answer in
  229.                 1)
  230.                 reportbackup
  231.                 ;;
  232.                 4)
  233.                 exit
  234.                 ;;
  235.          esac
  236. done
复制代码

论坛徽章:
0
23 [报告]
发表于 2008-03-26 10:20 |只看该作者
新人来学习下

论坛徽章:
0
24 [报告]
发表于 2009-05-15 17:12 |只看该作者
路过看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP