开机自启的方案
Linux支持多种程序开机自启动的方案,下面介绍三种。
创设条件: 程序/脚本启动命令与参数为 /app/start.sh -a
。请设置启动的时候替换成你自己的启动指令和参数!
rc.local方案
rc.local是最经典的方案了,以至于某些系统已经屏蔽了该方案。
rc.local文件需要使用sudo权限编辑,基础格式如下:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
/app/start.sh -a
在rc.local的最后一行(或 # 后的第一行)添加启动指令,保存文件即可。如果有exit 0
则启动指令要放在它之前。
如果没有rc.local文件,则可以尝试创建一个sudo touch /etc/rc.local
,并添加可执行权限 sudo chmod +x /etc/rc.local
。文件第一行必须是#!/bin/bash
,后面再继续添加启动指令。
由于手动创建的rc.local有很多玄学问题导致无法自启动,因此建议采用下面的方案。
desktop文件方案
.desktop文件是UOS、麒麟等许多系统的快捷方式,可以放在桌面、开始菜单用鼠标点击启动程序。如果把快捷方式放到特定的目录,就可以实现开机自启动。
desktop文件的基础格式如下:
[Desktop Entry]
Name=我的程序
Exec=/app/start.sh -a
Type=Application
以上元素都需要包含,Name是快捷方式显示的名称,用以替代文件名;Exec就是启动程序的命令。Type=Application即可。
编写好Desktop文件后,将该文件复制到/etc/xdg/autostart
目录即可(需要sudo复制)。
service方案
与windows 类似,Linux也有服务,我们就可以利用服务来开机自启了。
首先编写一个服务的说明文件,命名成"startapp.service"(请自定义一个方便识别的名称),它的与Desktop文件类似的:
[Unit]
Description=服务名称
After=network.target
[Service]
Type=simple
User=nobody
ExecStart=/app/start.sh -a
[Install]
WantedBy=multi-user.target
[Unit]字段是该服务的信息设定
Description是服务的简介,After指定该服务在什么服务后启动
[Service]字段是服务的实际执行信息
Type是服务启动方式,一般为simple就好。User指定执行服务的身份,可以是用户名。
ExecStart则是服务的具体启动指令
此外还可以设置访问的重启方式ExecReload、服务的停止方式ExecStop等等。
[Install]字段则定义这个服务的配置文件将被纳入到那个服务组以启动。
WantedBy=multi-user.target 即可让该服务具备自启动性质。
在编写完服务配置文件后,我们需要安装服务,即将这个服务文件移动到指定的路径:
sudo cp ./startapp.service /etc/systemd/system
# 将startapp替换成自己的名字
接下来启动服务并设置开机自启动,指令中不用加.service的后缀。
# 启动服务,验证文件是否正确
sudo systemctl start startapp
# 开机自启动
sudo systemctl enable startapp
三种方法对比
rc.local很多系统已经默认不带这个文件了,甚至有的系统已经关闭了这个文件的接口,自己创建文件和启动服务有可能会失败,所以不太推荐这个方法。该方式是以root身份启动的。
Desktop文件相对更复杂,需要编写配置文件了。这个自启动会在桌面运行之后才启动,相对晚一点。是最推荐的。该方式是以登录的用户身份启动的。
Service文件是最复杂的,但也是最可靠的,并且可以自定义启动的顺序、启动依赖,启动失败了也可以方便查看失败的原因。但由于太复杂,一般不推荐使用。该方式启动身份可以自定义,也能够连接桌面环境。
以上三种方法都既可以启动脚本,也可以启动程序,也可以执行某条指令。
当有多条指令的时候,建议编写一个简单的脚本,然后自启动这个脚本就好了。