linux下实现电脑开机后软件自启动

实现linux的软件自启动,需要四个文件

第一个【displayScreen.desktop】文件,.desktop文件就是一个用来运行程序的快捷方式,也叫启动器,常用来自启动用的文件,内容如下

bash 复制代码
[Desktop Entry]
#要执行的脚本位置
Exec=/home/yicaobao/test/mySoftware/DisplayScreen_Daemon.sh
#图标
Icon=/home/yicaobao/test/mySoftware/resource/logo/discreen-IV.png
Name=DisplayScreen
Name[zh_CN]=DisplayScreen
Terminal=false
Type=Application
X-Deepin-Vendor=user-custom

第二个文件【DisplayScreen_Daemon.sh】为检测软件是否启动的守护脚本文件,如果软件被杀死了,会被检测到,自动重启,可以自己改想要的效果,一下脚本代码为10s校测一次改软件进程,如果进程不存在就拉起软件

需要指定下要运行的程序名APP_NAME,路径APP_PATH

bash 复制代码
#! /bin/sh

#获取当前路径
currentPath=$(cd `dirname $0`; pwd)

#进程名字可修改
APP_NAME=DisplayScreen
APP_PATH=${currentPath}/bin/${APP_NAME}

while true ; do
    #用ps获取$PRO_NAME进程数量
    APP_NUM=`ps aux | grep -w ${APP_NAME} | grep -v grep |wc -l`
  	 #少于1,重启进程
  	 if [ ${APP_NUM} -lt 1 ];then
        echo "${APP_PATH} was killed"
        ${APP_PATH} &
    #大于1,杀掉所有进程,重启
    elif [ ${APP_NUM} -gt 1 ];then
        echo "more than 1 ${APP_PATH},killall ${APP_PATH}"
        pkill -9 $APP_NAME
        ${APP_PATH} &
    fi
    #kill僵尸进程
#	ps aux | grep -w DisplayScreen | grep T | grep -v grep | wc -l
#	ps -A -ostat,cmd | grep -e '^[zZ]' | grep -w DisplayScreen | grep -v grep | wc -l
    NUM_STAT=`ps -A -ostat,cmd | grep -e '^[zZ]' | grep -w ${APP_NAME} | grep -v grep | wc -l`
    if [ ${NUM_STAT} -gt 0 ];then
		 echo "pkill -9 ${APP_NAME}"
        pkill -9 ${APP_NAME}
        ${APP_PATH} &
    fi
    sleep 10s
   
done
 
exit 0

#备注 
# grep T 含义:T为输出行前缀控制,确保实际行内容的第一个字符位于制表位上,以便选项卡看起来很正常,好像不加也没影响
# grep -v grep 含义:很简单 ,为了去除包含grep的进程行 ,避免影响最终数据的正确性 

第三个文件【install.sh】为安装启动器的脚本,执行脚本后,会将启动器拷贝到启动目录下,开机会自动执行这个启动器

bash 复制代码
#!/bin/sh

#设置开机自动启动
echo "开始设置开机启动"
sudo cp ./DisplayScreen.desktop /etc/xdg/autostart

echo "安装完毕,重启后生效"

第四个文件【uninstall.sh】为卸载启动器的脚本,执行后,开机后软件就不会自启动了

bash 复制代码
#!/bin/sh

#结束所有程序
sudo killall DataAcq
#移除开机自动启动
echo "移除开机自动启动"
sudo rm /etc/xdg/autostart/DisplayScreen.desktop

echo "DisplayScreen卸载完毕"

我的要自启动的程序在bin目录下

执行下,守护脚本,软件就起来了

原理就是,建立一个启动器,把启动器放到开机启动区域,开机后,会把这个区域的启动器都执行一遍,所以我们只需要把启动器【DisplayScreen.desktop】的内容设为执行这个守护脚本【DisplayScreen_Daemon.sh】就行了

大功告成!

相关推荐
云云32123 分钟前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云32126 分钟前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
cominglately1 小时前
centos单机部署seata
linux·运维·centos
魏 无羡1 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse1 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
Karoku0661 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
木子Linux2 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8242 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维2 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
watermelonoops2 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin