前言
rc.local
是Ubuntus开机输入用户名
前自启动
的配置文件(🤔 在里面编写想要执行的shell脚本就可以咯!)Ps:从 Ubuntu 18.04 版本开始,不再默认提供rc.local服务。这是因为 Ubuntu 18.04 之后的版本使用 Systemd 作为初始化系统,而rc.local是一个传统的 SysV 初始化脚本,与 Systemd 不兼容。(但并没有真正的删除这项的配置,我们可以
自己创建rc.local
来设置开机自启命令。)Description: Ubuntu 18.04.6 LTS
建议通读全文或者过一遍目录,里面有一些针对自己曾出现过的错误的解决办法!!!
1.检查系统中是否包含rc-local.service服务
ls /lib/systemd/system | grep rc
我们需要用到的文件rc-local.service
2.配置rc-local.service服务
一般正常的启动文件主要分成三部分
- [Unit] 段: 服务启动顺序与服务依赖关系
- 如:本服务在哪些服务启动之后启动,仅定义启动顺序,不定义服务依赖关系
- [Service] 段: 启动行为,如何启动,停止,重启,终止等
- [Install] 段: 如果期望服务开机自启动,一般只配置一个 WantedBy 指令,如果不期望服务开机自启动,则 Install 段落通常省略。
打开rc-local.service服务配置文件
sudo vim /lib/systemd/system/rc-local.service
WantedBy和Alias两个英文别打错!
Ps:这里偷个懒使用sudo
提权打开文件,在保存的时候需要wq!
强制保存退出wq后面有一个感叹号!!!
或者
cd /lib/systemd/system/
sudo chmod u+w rc-local.service # 设置完 就可以 w 保存啦!
sudo chmod u-w rc-local.service # 取不取消都行!
Install | 含义 |
---|---|
WantedBy | 本服务设置开机自启动时,在被依赖目标的.wants 目录下创建本服务的软链接。例如 WantedBy = multi-user.target 时,将在 /etc/systemd/multi-user.target.wants 目录下创建本服务的软链接。 |
Alias | 指定创建软链接时链接至本服务配置文件的别名文件。例如 reboot.target 中配置了 Alias=ctrl-alt-del.target,当执行 enable 时,将创建 /etc/systemd/system/ctrl-alt-del.service 软链接并指向 reboot.target。 |
3.创建配置rc.local文件
在/etc/ 目录下
创建文件
sudo vi /etc/rc.local
添加权限
sudo chmod 755 /etc/rc.local
Ps:注意需要再首行添加 #!/bin/bash
因为这个是个 shell 脚本
#!/bin/bash
# 这行指定了你的程序将使用那个解释器,基本上是将路径引用到解释器。Linux/Unix中有很多解释器,其中一些是:bash,zsh,sh,csh和ksh等
mkdir /home/qz/TestSelf-starting
if [ $? -eq 0 ];then
echo "Create directory OK"
else
echo "Create directory Fail"
fi
在 linux 中命令执行状态:0 为真,其他为假 。
eq 等于
$? 是显示最后命令的退出状态,0 表示没有错误,其他(比如1等)表示有错误
Ps: 有的小伙伴会说我需要用到 sudo 提权指令怎么办,每次sudo完还需要sudo的密码,见下面 情况分类 - 情况一 取消sudo密码
Ps: 有的小伙伴初次使用shell脚本,在自启的中写了重启(reboot)Linux/Ubuntu无法进入系统开机就重启怎么解决情况分类 - 情况二 Linux/Ubuntu自启动中写了重启(reboot)无法进入OS
手动测试
测试下刚写的脚本叭!
# 可以这样
. /etc/rc.local
OR
# 也可以这样
source /etc/rc.local
rc.local 服务的管理
我们只需要 start 启动服务就可以啦~~~
# 启动服务
systemctl start rc-local.service
Ps:这里报错了,需要重新加载一下资源 或者 重启一下系统
# 执行这个语句,就可以啦!!! source 应该跟这个指令有关
systemctl daemon-reload
Ps:自启动跑一些自己写的程序(一直在后后台运行的情况!!!),想修改一下代码,(涉及到,板卡,端口)在运行可能会有冲突,要么就是修改后重启在运行,我们可以通过 ps -aux 查看运行进程,见下面 情况分类 - 情况三 ps -aux查看当前运行进程通过kill -9 结束当前运行进程
rc.local 相关服务的管理命令
rc.local 服务显示状态
systemctl status rc-local.service
未启用任何服务
启动了服务显示
rc.local 服务的启动
# 启动服务
systemctl start rc-local.service
rc.local 服务的重启
# 重启服务
systemctl restart rc-local
rc.local 服务的停止
# 停止服务
systemctl stop rc-local.service
rc.local 服务使能 --> 开机依旧生效
systemctl enable rc-local.service
rc.local 禁用服务 --> 再次开机时会失效
systemctl disable rc-local.service
问题情况分类
情况一:取消sudo密码
# 这里需要sudo(提权或者root用户)要不看不到内容滴!!!
sudo vim /etc/sudoers
直接修改%sudo ALL=(ALL:ALL) ALL
%sudo ALL=NOPASSWD:ALL
WQ!
强制保存退出即可~!
情况二: Linux/Ubuntu自启动中写了重启(reboot)无法进入OS
小伙伴不小心在自动中写了重了重启,不必慌张 跟着操作 2分钟解决!!!
- 按下电源开关启动电脑并立即
按住Shift键
可以进入引导界面
- 之后按
e
编辑启动项(进入单用户模式(Single User Mode)),如果按e没反应
在按一下Shift键
在按e
- 将图中
ro
改为rw
,删掉rhgb
,quiet
,末尾添加init=/bin/bash
- 键盘
CTRL + x
启动,进入recovery模式 - 直接进入
/etc/rc.local
修改文件,删掉重启指令,保存重启即可
# 删掉重启指令,保存重启即可
vi /etc/rc.local
如果第5步解决不了 在执行以下操作 也是在网上看到的
-
挂载根目录为可写:
mount -o remount,rw /
-
修改 /etc/rc.d/rc.local,保存退出:
vi /etc/rc.d/rc.local
-
重启服务器,即可进入系统
情况三: ps -aux查看当前运行进程通过kill -9 结束当前运行进程
简单写一个测试程序假如是自启的程序,运行起来&
代表后台运行
ps aux | grep ./testRun
通过ps aux
查看当前进程,| grep
过滤,testRun
你运行的程序名字
ps aux | grep ./testRun
通过kill - 9
淦掉当前进程(Ps: 有时可能也会提示没有权限,前面加上sudo就可以啦!)
kill -9 xxx