Ubuntu18-Linux开机自启配置rc-local

本文介绍了如何在Ubuntu18.04及后续版本中使用rc.local配置文件实现开机自启动,包括检查rc-local.service服务、配置文件结构、创建和管理rc.local脚本,以及处理可能出现的问题,如取消sudo密码、避免重启后无法进入系统和结束运行进程。
摘要由CSDN通过智能技术生成

前言

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

image-20240331204929269

我们需要用到的文件rc-local.service

2.配置rc-local.service服务

一般正常的启动文件主要分成三部分

  • [Unit] 段: 服务启动顺序与服务依赖关系
    • 如:本服务在哪些服务启动之后启动,仅定义启动顺序,不定义服务依赖关系
  • [Service] 段: 启动行为,如何启动,停止,重启,终止等
  • [Install] 段: 如果期望服务开机自启动,一般只配置一个 WantedBy 指令,如果不期望服务开机自启动,则 Install 段落通常省略。

打开rc-local.service服务配置文件

sudo vim /lib/systemd/system/rc-local.service

image-20240331213405042

WantedByAlias两个英文别打错!

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

手动测试

image-20240331215803033

测试下刚写的脚本叭

# 可以这样 
. /etc/rc.local 

OR

# 也可以这样
source /etc/rc.local

image-20240331221054895

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

未启用任何服务

image-20240331221846861

启动了服务显示

image-20240331223045492

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!强制保存退出即可~!

image-20240331224203543

情况二: Linux/Ubuntu自启动中写了重启(reboot)无法进入OS

小伙伴不小心在自动中写了重了重启,不必慌张 跟着操作 2分钟解决!!!

  1. 按下电源开关启动电脑并立即按住Shift键可以进入引导界面

image-20240331224842948

  1. 之后按e编辑启动项(进入单用户模式(Single User Mode)),如果按e没反应在按一下Shift键在按e

image-20240331225612395

  1. 将图中ro改为rw,删掉rhgb,quiet,末尾添加init=/bin/bash

image-20240331225859759

  1. 键盘CTRL + x启动,进入recovery模式
  2. 直接进入/etc/rc.local修改文件,删掉重启指令,保存重启即可
# 删掉重启指令,保存重启即可
vi /etc/rc.local

如果第5步解决不了 在执行以下操作 也是在网上看到的

  1. 挂载根目录为可写:mount -o remount,rw /

  2. 修改 /etc/rc.d/rc.local,保存退出: vi /etc/rc.d/rc.local

  3. 重启服务器,即可进入系统

情况三: ps -aux查看当前运行进程通过kill -9 结束当前运行进程

简单写一个测试程序假如是自启的程序,运行起来&代表后台运行

image-20240402213241524

ps aux | grep ./testRun通过ps aux查看当前进程,| grep过滤,testRun你运行的程序名字

ps aux | grep ./testRun

image-20240402215814692

通过kill - 9淦掉当前进程(Ps: 有时可能也会提示没有权限,前面加上sudo就可以啦!)

kill -9 xxx

image-20240402215925974

  • 29
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果你的 Linux 系统没有 rc.local 文件,则需要根据不同的发行版进行配置。以下是一些常见的 Linux 发行版的开机自启设置方法: 1. Ubuntu 16.04 及之前版本: Ubuntu 16.04 及之前版本使用 upstart 管理系统服务,可以通过以下步骤进行开机自启设置: - 在 /etc/init 目录下创建一个新的 .conf 文件,例如: ``` sudo nano /etc/init/myscript.conf ``` - 在该文件中添加以下内容: ``` description "My script service" start on startup task exec /usr/bin/python3 /home/user/myscript.py ``` 其中,`description`是服务的描述,`start on startup`表示在系统启动时自动启动,`exec`是需要执行的命令或脚本。 - 保存文件并退出编辑器。 - 重启系统,使修改生效。 2. Ubuntu 18.04 及之后版本: Ubuntu 18.04 及之后版本使用 systemd 管理系统服务,可以通过以下步骤进行开机自启设置: - 在 /etc/systemd/system 目录下创建一个新的 .service 文件,例如: ``` sudo nano /etc/systemd/system/myscript.service ``` - 在该文件中添加以下内容: ``` [Unit] Description=My script service After=network.target [Service] ExecStart=/usr/bin/python3 /home/user/myscript.py WorkingDirectory=/home/user/ Restart=always User=root [Install] WantedBy=multi-user.target ``` 其中,`Description`是服务的描述,`ExecStart`是需要执行的命令或脚本,`WorkingDirectory`是命令或脚本所在的目录,`User`是执行命令或脚本的用户。 - 保存文件并退出编辑器。 - 启用该服务并设置开机自启动: ``` sudo systemctl daemon-reload sudo systemctl enable myscript.service ``` - 重启系统,使修改生效。 3. CentOS 7 及之后版本: CentOS 7 及之后版本使用 systemctl 管理系统服务,可以通过以下步骤进行开机自启设置: - 在 /etc/systemd/system 目录下创建一个新的 .service 文件,例如: ``` sudo nano /etc/systemd/system/myscript.service ``` - 在该文件中添加以下内容: ``` [Unit] Description=My script service After=network.target [Service] ExecStart=/usr/bin/python3 /home/user/myscript.py WorkingDirectory=/home/user/ Restart=always User=root [Install] WantedBy=multi-user.target ``` 其中,`Description`是服务的描述,`ExecStart`是需要执行的命令或脚本,`WorkingDirectory`是命令或脚本所在的目录,`User`是执行命令或脚本的用户。 - 保存文件并退出编辑器。 - 启用该服务并设置开机自启动: ``` sudo systemctl daemon-reload sudo systemctl enable myscript.service ``` - 重启系统,使修改生效。 以上是一些常见的 Linux 发行版的开机自启设置方法,如果还有问题,请告诉我。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值