如何设置 Linux 开机启动任务

Posted on Wed, 25 Dec 2024 13:55:27 +0800 by LiangMingJian


需求

在 Linux 运维时,往往编写了一些 Shell 脚本,这些脚本中,有些我们希望在 Linux 系统开机后自动运行,实现自动维护,此时如何实现开机自启就成了问题。

使用 /etc/rc.d/rc.local 文件

这是最简单粗暴的方法

/etc/rc.d/rc.local 是 Linux 系统开机启动任务文件 /etc/rc.local 的软链接,其作用是在系统启动的最后阶段执行用户自定义命令或脚本。

特别注意,/etc/rc.d/rc.local 要生效,则必须在配置后需要手动添加可执行权限,让脚本允许被运行

vi /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

使用 systemd 服务

通过将目标脚本创建为系统服务,实现更精细化的开机启动控制。

1.创建服务文件

在系统目录 /etc/systemd/system/ 中创建一个 start.service 的服务。

cd /etc/systemd/system/
vi mystart.service

start.service 服务文件中添加以下内容。

[Unit]
# 服务描述
Description=MyStartService
# 依赖网络服务
After=network.target

[Service]
# 启动命令
ExecStart=/root/your_start_script.sh
# 只在失败时重启
Restart=on-failure
# 重启间隔
RestartSec=5s
# 允许重启次数
StartLimitBurst=10
# 执行用户
User=root

[Install]
# 多用户模式下启用
WantedBy=multi-user.target

特别注意,执行脚本中必须添加 #!/bin/bash 头,以避免脚本无法识别。同时脚本中所有涉及路径的内容,应当使用绝对路径,如 /root/data.txt,以避免输出丢失。

2.启动服务并设置为开机自启

systemctl start mystart.service
systemctl status mystart.service
systemctl enable mystart.service 

3.删除服务

# 停止并关闭自动启动
systemctl stop mystart.service
systemctl disable mystart.service

# 删除对应的服务文件
rm /etc/systemd/system/mystart.service

# 检查服务是否还存在
systemctl status mystart.service
systemctl list-unit-files | grep mystart

使用 crontab 的 @reboot 功能

crontab 是 Linux 系统中的定时任务系统,用户可以通过编辑该系统文件来实现定时任务的生效,开机自启任务的生效。

1.进入 cronta 系统的编辑模式

crontab -e

2.在文件中加入开机自启任务

@reboot /root/your_script.sh

特别注意,所使用的脚本必须使用绝对路径。