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文件是最复杂的,但也是最可靠的,并且可以自定义启动的顺序、启动依赖,启动失败了也可以方便查看失败的原因。但由于太复杂,一般不推荐使用。该方式启动身份可以自定义,也能够连接桌面环境。

以上三种方法都既可以启动脚本,也可以启动程序,也可以执行某条指令。

当有多条指令的时候,建议编写一个简单的脚本,然后自启动这个脚本就好了。