前言
笔者最近在一台机器上跑深度学习方面计算机视觉的模型,觉得等待训练的过程非常枯燥,而且如果它停下来了还得重新输入命令让它跑,于是就想写个脚本,设置开机之后它会自动开始运行这个程序,并且程序结束后又会自动重来。脚本编写的思路不难,具体实现也很简单。
项目介绍
由于本项目涉及到的系统类型、显卡、AI加速卡、模型代码等等都不属于通用范畴,所以在接下来的内容中会将敏感信息进行处理。读者可能没有办法直接应用其中的代码,但是思路都是通用的,可根据自身项目的实际情况进行修改。
项目在docker环境下运行,所以需要编写两个脚本,一个用于启动docker环境,一个用于设置在docker环境中的命令。
为什么不能写在同一个脚本中呢?因为启动docker的命令执行结束后就会退出docker环境,后续命令相当于是在裸机进行了。
方案实现
脚本1:repeatAndautostart.sh——让项目循环跑
思路:
- while循环
- 再次运行项目前需要把原来的engine文件删掉
#激活python环境和对应SDK环境,注意先后顺序
source /xx/python/bin/activate source /xxxsdk/sdk/env.sh
#进入工作目录进行源码构建及运行测试
cd 目录名
cd build/bin
while : do
rm /xxx/xxx.engine
./运行模型的可执行程序 -c ../../config/xxx/xxx.prototxt
done
脚本2:boot.sh——启动docker环境
xhost +
docker run --privileged --rm -it --name xxxdemo -e DISPLAY=$DISPLAY -e xxx_DEVICES=all -v /etc/localtime:/etc/localtime:ro -v /tmp/.X11-unix:/tmp/.X11-unix -v /dl:/workspace -v /xx/sdk:/xxx/sdk -v /home/xxx/xxxdemo/footscript:/footscript demo:v3 /bin/bash /footscript/repeatAndautostart.sh
值得注意的是:
- 不加-it参数,docker容器启动后又会退出
- -v是挂载本地的目录到docker文件系统对应目录中
- /bin/bash后接脚本路径2:启动docker后执行脚本1
开机自启动程序
开机自启动大致可分为两种类型,一是有界面的,二是无界面的。
我们属于有界面程序的启动,所以用desktop方式,可以打开一个终端模拟器;但如果没有任何命令运行它会很快退出,所以我们需要在此处写入运行脚本的路径
具体方式如下:
cd /etc/xdg/autostart
进入这个目录sudo su
普通用户对这些文件只有只读权限,需进入root模式vim test.desktop
打开一个新文件,这种方式修改后如果保存了就是生成新文件,不保存直接退出就不会有该文件
往test.desktop中写入如下代码:
[Desktop Entry]
Name=test Exec=/usr/bin/x-terminal-emulator -e 'bash /home/xxx/xxxdemo/boot.sh'
Terminal=false
Type=Application
重启后就会看到所有设置生效了。
参考资料
- Linux设置软件开机自启动的三种方式(中标麒麟、银河麒麟、ubuntu)_linux如何开机自启有窗口的程序_从此开始低调范✌️的博客-CSDN博客