由于文件系统类型的不同,自启动脚本的制作方法也不一样,在此仅以 Systemd 类型和 init 类型的文件系统进行介绍,在说明自启动脚本制作方法之前先介绍两种文件类型的区别。
一. Systemd(service)和 init的区别
1. init。以前的Linux启动都是用init进程,这是一个串行启动,也就是说只有前一个进程启动完,才会启动下一个进程。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,导致脚本变得很长,导致启动脚本复杂。
启动服务的方法:仅仅是调用/etc/init.d/目录下的脚本,形如 S90app.sh,数字代表启动顺序,app为名字。
2. Systemd。现在较新的Linux 都使用systemd替代了 init,其提高了系统的启动速度,解决了期待脚本复杂的情况。
Systemd 中的自启动脚本和 service 相关,如果需要添加一个自启动脚本,只需要在开机启动时启动一个自己创建的 service 即可。
二. 添加自启动脚本的方法
1. init.添加自启动脚本的方法。/etc/ini.d/rcS 这个脚本会在开机自启动运行,脚本内容如下,此脚本会遍历 /etc/init.d 目录下文件,比如脚本形如 S90app.sh,即可执行。
#!/bin/sh
# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do #遍历目录下的脚本,依次执行
# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set start
. $i
)
;;
*)
# No sh extension, so fork subprocess.
$i start
;;
esac
done
2. systemd 添加自启动脚本的方法。
a. 首先准备好启动脚本。此处为 /System/Startup/SysStartup.sh
b. 创建一个 service文件。进入/etc/systemd/system/,创建一个sysapp_launch.service文件,文件内容模板为
c. 启动创建的 service。
注:1. 在 /etc/systemd/system目录是一个符号链接,指向 /usr/lib/systemd/system里面的sysapp_launch.service文件。
2. 支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件, 而 Systemd 启动时,只执行/etc/systemd/system目录里面的配置文件。