我的逻辑是,上传word后,把word文件名写入到exec.txt里,然后服务器上每2秒执行一段shell去检测exec.txt里是否是空的,如果不是空的,就执行java -jar 。把word转成pdf,如果转成功,就把exec里对应的文件名删掉。
dowordtopdf脚本是这样写的:
#!/bin/sh
time=2
for (( i=0; i<60; i=(i+$time) )); do
myFile="/home/svn/repos/www/wwwroot/Runtime/Logs/exec.txt"
if [ ! -s "$myFile" ]
then
touch "$myFile"
else
 cat "$myFile" | while read line
 do
  myPdf=$line
  if [ "$myPdf" ]
  then
    pdfFile="/home/svn/repos/www/wwwroot/Upload/pdf/${myPdf}.pdf"
    if [ ! -f "$pdfFile" ]
    then
java  -jar  /alidata1/source/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar  /home/svn/repos/www/wwwroot/Upload/doc/${myPdf}.doc  /home/svn/repos/www/wwwroot/Upload/pdf/${myPdf}.pdf
    else
      echo "/home/svn/repos/www/wwwroot/Upload/pdf/${myPdf}.pdf exist" >>  /home/svn/repos/www/wwwroot/Runtime/Logs/log.txt
    fi
    if [ ! -f "$pdfFile" ]
     thenjava  -jar  /alidata1/source/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar  /home/svn/repos/www/wwwroot/Upload/doc/${myPdf}.doc  /home/svn/repos/www/wwwroot/Upload/pdf/${myPdf}.pdf
     else
        sed -i "/$myPdf/d" "$myFile"
     fi
   fi
 done
fi
sleep $time
done
exit 0
crontab 里是这样写的:
* * * * *  sh /usr/sbin/dowordtopdf
php上传的是这样写的:
$tempFileNmae = date("YmdHis") . $rand;
$file = $tempFileNmae.'.doc';
$file_path = "Upload/doc/". $file;
$fp=fopen('Runtime/Logs/exec.txt',"a");//打开文件
fwrite($fp,$tempFileNmae."\n");//写入文件
fclose($fp);//关闭文件  手动执行shell是可以的,但是放到crontab里就不行了,请大牛指点一下,感谢!