Linux系统如何设置开机自启脚本

Linux系统开启自启脚本的配置,我这里记录了三种办法,对于绝大多数linux系统,这三种方法里肯定有合适的。

1. 设置/etc/rc.local文件

/etc/rc.local文件是 /etc/rc.d/rc.local文件的软连接,rc.local文件本质上就是一个shell脚本
在我的电脑里,内容是是这样的:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
#此脚本在每个多用户运行级别结束时执行(没太懂,只知道实在开机时候运行)

# Make sure that the script will "exit 0" on success or any other value on error.
#确保脚本在成功时以“exit 0”退出,在执行出错时以其他值退出。

# In order to enable or disable this script just change the execution bits.
#启用或禁用该脚本,需更改执行权限

# By default this script does nothing.
#默认情况下,该脚本什么都不做
exit 0

不同的计算机,/etc/rc.local脚本的内容可能有所不同,但是大致意思都差不多,也就是这个脚本开机的时候会被执行一遍。
所以,我们可以在里边添加我们自己的开机启动项,比如我的自启脚本test.sh内容如下:

#!/bin/bash
file="test.txt"
echo 'test shell to this file' >> $file

那我就在rc.local的“exit 0”前边加上执行命令,如果文件最后一行不是“exit 0”,把自启指令写在结尾就行,写完之后的rc.local

#!/bin/sh -e
#注释省略
/home/lfh/test.sh
exit 0

然后还需要给rc.local赋予可执行权限:

sudo chmod +x /etc/rc.local

重启计算机,就可以发现test.sh同级目录下边多了一个test.txt,脚本自启成功!
在这里插入图片描述

死循环脚本:以上是针对单次脚本,也就是可以立马执行完的脚本,如果脚本是死循环脚本(脚本不会自动退出),情况有所不同。

我们把前边的test.sh稍作修改:

#!/bin/bash
file="test.txt"
while((1))
do
echo 'test shell to this file' >> $file
sleep 1
done

这个脚本里边有死循环,是一个典型的死循环脚本,没有任何退出判断,如果还按上面的方式写,就会堵塞开机进程,导致计算机开不了机,具体原因,可以参考这篇文章
对于死循环脚本,应当这么写:

/home/lfh/test.sh &

后边加上一个空格和一个&,意思是非阻塞模式执行脚本,这样便不会导致开不了机了。

多脚本:如果你有多个开机脚本,按照同样的方式,一行一个即可

#!/bin/sh -e
#注释省略
/home/lfh/test1.sh &
/home/lfh/test1.sh &
/home/lfh/test1.sh &
 ......
exit 0

2. 使用systemd服务

有的系统的没有/etc/rc.local文件,就没法直接使用第一种办法了,比如ubuntu18.04及以上的版本,/etc/目录下就没有rc.local文件

这是因为Ubuntu 16.10开始不再使用 initd 管理系统,改用 systemd,包括用 systemctl 命令来替换了 service 和 chkconfig 的功能

这种情况下,我们依然可以使用/etc/rc.local来添加自启脚本

打开终端,打开/lib/systemd/system/rc-local.service脚本,看到下边内容
在这里插入图片描述rc-local.service文件里边说明了以/etc/rc.local作为自启动脚本,虽然Ubuntu18.04版本废弃了/etc/rc.local脚本,但是在systemd服务里边保留了以/etc/rc.local脚本为自启的服务,也就是rc-local.service这个服务

首先要在rc-local.service结尾添加

[Install]  
WantedBy=multi-user.target

由于没有/etc/rc.local脚本,所以我们要手动创建一个

sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local

然后就可以向脚本里添加我们的自启项,剩下的就与第一种方法一致了
写个示例:

#!/bin/sh
echo "auto start success" > /usr/local/text.log
exit 0

然后,还需要启动systemdrc-local.service服务

sudo systemctl enable rc-local
sudo systemctl start rc-local.service

重启计算机,查看脚本是否生效。

3. 放在/etc/profile.d目录下

这是一个简单粗暴的办法,系统开机的时候,/etc/profile脚本会遍历执行/etc/profile.d/目录下的.sh脚本

在这里插入图片描述
说实话,我并没有完全看明白这段代码到底是以何种方式执行脚本,我猜大概是以堵塞的形式运行的。

如果脚本是单次执行的脚本,这样做是没有问题的,唯一的疑问是如果自启脚本是死循环脚本,会不会堵塞开机进程。

对于这个问题,我没有去进行验证,不过我想到了一个巧妙的办法来规避此问题。

那就是在/etc/profile.d/下边新建一个.sh脚本,比如就叫myAutoStart.sh,然后在myAutoStart.sh里边写上我们需要的自启脚本。myAutoStart.sh相当于一个中介,是一个单次脚本,虽然我们不能控制/etc/profile的执行方式,但是我们可以控制myAutoStart.sh调用我们自启脚本的方式。

这样的好处在于,我完全不需要关心/etc/profile到底以哪种方式执行的脚本。

下面是我的例子

myAutoStart.sh脚本放在/etc/profile.d目录下边,记得赋予可执行权限
在这里插入图片描述

自启脚本test.sh内容:
在这里插入图片描述
重启电脑即可

不知道你有没有发现,/etc/profile本质是也是个自启脚本,在最后面执行自启脚本也是可以的。

  • 5
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
如果你想让一个脚本Linux 开机时自动运行,你可以按照以下步骤设置开机自启脚本: 1. 编写脚本文件 首先,你需要编写一个脚本文件,这个文件将作为开机自启脚本。你可以使用任何文本编辑器,例如 vim 或 nano。 例如,假设你想要运行一个名为 `myscript.sh` 的脚本,这个脚本位于 `/home/user/myscript.sh`。你可以使用以下命令创建这个脚本文件: ``` nano /home/user/myscript.sh ``` 然后,将你需要运行的命令写入到这个脚本中。 2. 将脚本文件设置为可执行 在你可以运行脚本之前,你需要将它设置为可执行。你可以使用以下命令将 `myscript.sh` 设置为可执行: ``` chmod +x /home/user/myscript.sh ``` 3. 将脚本添加到启动脚本中 接下来,你需要将脚本添加到启动脚本中。不同的 Linux 发行版可能有不同的启动脚本,但大多数都使用了 systemd。 如果你的 Linux 发行版使用 systemd,请遵循以下步骤: - 创建一个名为 `myscript.service` 的文件,这个文件将作为服务的配置文件。 ``` sudo nano /etc/systemd/system/myscript.service ``` - 在 `myscript.service` 文件中添加以下内容: ``` [Unit] Description=My script [Service] ExecStart=/home/user/myscript.sh Restart=always User=username [Install] WantedBy=multi-user.target ``` 请注意,你需要将 `ExecStart` 中的路径替换为你的脚本路径,并将 `User` 替换为你的用户名。如果你想要在脚本失败时自动重启脚本,请将 `Restart` 设置为 `always`。 - 保存并关闭 `myscript.service` 文件。 - 激活服务,并设置开机自启: ``` sudo systemctl enable myscript.service sudo systemctl start myscript.service ``` 现在,你的脚本应该已经被设置开机自启,且已经在启动时自动运行了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值