先使用wget将升级文件下载到dcu_update文件夹里,然后使用system(“remote_update.sh”)函数调用执行脚本。
remote_update.sh:
- #!bin/sh
- #此脚本放在dcu文件夹的外面
- #杀掉正在运行的dcu进程
- pidlist=`ps -ef |grep "dcu.bin" |grep -v "grep"|awk '{print $2}'`
- echo "id list:$pidlist"
- if [ "$pidlist" = "" ]
- then
- echo "no app pid alive"
- else
- for pid in ${pidlist}
- do
- kill -9 $pid
- echo "KILL $pid:"
- echo "app stop success"
- done
- fi
- #查看dcu_backup文件夹是否存在,如果存在则删除
- if [ -e dcu_backup ]
- then
- rm -rf dcu_backup
- echo "delete dcu_back_up"
- fi
- #将当前dcu文件夹改名成dcu_backup
- if [ -e dcu ]
- then
- mv dcu dcu_backup
- echo "rename dcu to dcu_backup"
- fi
- #升级文件放在dcu_update中,将dcu_update改名成dcu
- if [ -e dcu_update ]
- then
- mv dcu_update dcu
- echo "rename dcu_update to dcu"
- else
- #如果dcu_update文件夹不存在,则将dcu_backup文件夹拷贝到dcu,启动里面的dcu程序
- cp -r dcu_backup dcu
- cd dcu
- ./dcu.bin & #加"&",让dcu后台运行
- echo "start old dcu success"
- exit 0 #退出
- fi
- #启动升级后的dcu
- cd dcu
- ./dcu.bin & #加"&",让dcu后台运行
- cd ..
- echo "start new dcu success"
- #检查升级后的dcu是否正常启动,如果正常启动则生成一个标识升级成功的文件,退出
- #如果没有检测到升级后的dcu进程,则删除当前dcu文件夹,拷贝备份程序为当前dcu
- updatepid=`ps -ef |grep "dcu.bin" |grep -v "grep"|awk '{print $2}'`
- if [ "$updatepid" = "" ]
- then
- #没有检测到升级后的dcu进程
- rm -rf dcu
- cp -r dcu_backup dcu
- cd dcu
- ./dcu.bin & #加"&",让dcu后台运行
- exit 0
- else
- #升级成功,创建update_success空文件
- #dcu启动后检测时候有此文件,如果有,则发送升级成功消息,并删除此文件;如果没有,则发送升级失败消息
- touch update_success
- fi