ubuntu18 关于程序升级的傻瓜式操作.
应用环境是这样的, 在一个ubuntu18的机器上运行着一个程序,
程序有可能要升级, 升级就是把U盘中的一个升级包,解压缩到磁盘上的一个固定位置就可以了.
但是,操作的人可能不懂linux, 也不会命令行操作, 甚至不会解压缩文件. 所以要求:
- 在界面上放一个升级图标,
- 双击这个桌面图标, 自动从U盘解压缩文件,覆盖原来的文件
- 杀死原运行文件,执行升级后新运行文件.
通过分析以上需求,我们分两部分进行,
第一: 编写一个脚本文件,完成解压升级,关闭启动程序的功能
脚本是灵活的,根据需求去完成任何复杂的功能, 下边是我的一个实例,功能见注释:
$cat update.sh
#!/bin/bash
# 判定U盘是否存在, 若存在,把U盘mount 到一个固定位置,需要sudo 密码!!
# 用/dev/sdb1 来判断是否有U盘插入,虽不是很准确,但尚可使用!
if [ -b /dev/sdb1 ]; then
sudo umount /dev/sdb1
sudo mount -t vfat /dev/sdb1 /opt/mnt
# 判定升级的文件个数,不为1提示错误
output=$(ls /opt/mnt/* |grep monitor_all |wc -l)
if [ $output -ne 1 ]
then
echo "U盘升级文件只能是一个,你的是 $output 个"
sudo umount /dev/sdb1
exit 1
fi
#解压缩文件
zipfile=$(ls /opt/mnt/* |grep monitor_all)
echo "unzip -o $zipfile -d /opt"
unzip -o $zipfile -d /opt
sudo umount /dev/sdb1
echo "完成1"
#停止旧程序,启动新程序
killall monitorAll modbusmaster
/opt/S85qt.sh
fi
echo "完成2"
read
第二: 为这个执行脚本见一个桌面快捷方式(.desktop)
方法: 随便copy一个desktop 文件做模板, 填充对应的项就可以了.
一般别的desktop 文件比较长,而我这个比较短,所以记录一下, 如下:
$cat update.desktop
[Desktop Entry]
Name = 升级程序
Comment = update teckwin program
Exec = /opt/update.sh
Icon = /opt/image/logo_3.png
Terminal = true
Type = Application
这是标准格式,各个key 值意义一目了然,
在桌面上显示的名字 Name = 升级程序
在桌面上显示的图标 Icon = /opt/image/logo_3.png
执行的应用程序 Exec = /opt/update.sh
这个脚本是要启动控制台的,故Terminal = true
它的类型是一个应用程序(可执行) Type = Application
注释Commnent, 点击属性时可以看到