修改 /etc/rc.d/rc.local 文件

这种方法,在任何 Linux 系统上都可以使用。 /etc/rc.d/rc.local 文件会在 Linux 系统各项服务都启动完毕之后再被运行。所以你想要自己的脚本在开机后被运行的话,可以将自己脚本路径加到该文件里。

linux rc.local不生效

  • 在Linux系统中,rc.local通常用于在系统启动时执行特定的命令或脚本。
    • 然而,从CentOS 7版本开始,/etc/rc.d/rc.local文件的默认权限被设置为644,这意味着它不会被系统自动加载以执行开机启动任务。
    • 此外,rc-local.service服务的默认状态也是disabled。因此,如果你发现rc.local文件中的命令没有在执行,你可能需要手动更改文件权限和启用服务。

解决方法如下:

  • systemctl status rc-local.service
  • 改变文件权限:通过运行命令 chmod +x /etc/rc.d/rc.local 来确保rc.local文件具有可执行权限。 启用服务:使用命令 systemctl enable rc-local.service 来使rc-local.service服务处于激活状态。如果服务已存在,可以使用 systemctl start rc-local.servicesystemctl restart rc-local.service 来尝试重新启动服务。 如果在尝试上述步骤之后仍然遇到问题,可能是因为其他安全机制如“麒麟安全授权认证”机制导致的。在这种情况下,可以通过以下命令来解决:

sudo kysec_set -n exec -v original /etc/rc.local

这将修改rc.local文件的执行安全标记为original,从而允许其按照预期在系统启动时执行。

使用 crontab

  • crontab 是 Linux 下的计划任务,当时间达到我们设定的时间时,可以自动触发某些脚本的运行。

我们可以自己设置计划任务时间,然后编写对应的脚本。但是,有个特殊的任务,叫作 @reboot ,我们其实也可以直接从它的字面意义看出来,这个任务就是在系统重启之后自动运行某个脚本。

[root@Devops6 ~]#vim auto_run_script2.sh
#!/bin/bash
date >> /root/output2.txt
hostname >> /root/output2.txt
# 保存退出后,再给它赋予可执行权限:
[root@Devops6 ~]#chmod +x auto_run_script2.sh 
[root@Devops6 ~]#ll auto_run_script2.sh 
-rwxr-xr-x 1 root root 472 Mar 20 06:55 auto_run_script2.sh
我们可以通过 crontab -e 来设置。
@reboot /root/auto_run_script2.sh
但是这里编辑完,有提示一些异常log:(这里的log可忽略,最后的效果符合预期。)
#查看也是有定时任务的
[root@Devops6 ~]#crontab -l
@reboot /root/auto_run_script2.sh

使用 systemd 服务

方法仅适用于 systemd 系统。如何区分是不是 systemd 系统?很简单,只需运行 ps aux 命令,查看 pid 为 1 的进程是不是 systemd 。

需要创建一个 systemd 启动服务,并把它放置在 /etc/systemd/system/目录下。 我们创建的 systemd 启动服务如下。请注意,这时后缀是 .service ,而不是 .sh 。

$ vim /etc/systemd/system/auto_run_script3.service
[Unit]
Description=Run a Custom Script at Startup
After=default.target

[Service]
ExecStart=/root/auto_run_script3.sh

[Install]
WantedBy=default.target

# 从服务的内容可以看出来,我们最终还是会调用 /root/auto_run_script3.sh 这个脚本。

# 然后,我们再把这个脚本放置在 /etc/systemd/systerm/ 目录下,之后我们再运行下面两条命令来更新 systemd 配置文件,并启动服务。
[root@Devops6 ~]#systemctl daemon-reload
[root@Devops6 ~]#systemctl enable auto_run_script3.service
Created symlink from /etc/systemd/system/default.target.wants/auto_run_script3.service to /etc/systemd/system/auto_run_script3.service.