数码产品

Linux中如何在系统重启时执行命令或脚本

众所周知服务在Linux中服务能被增加到系统启动时运行,这是没有任何问题的,因为它们中的许多服务有它们自己的脚本,使用“chkconfig”“systemctl”命令完成例如,要在启动时添加“Apache httpd” 服务,请根据您的系统管理器运行以下命令之一。同样,您可以在启动时根据需要添加任何众所周知的服务。

对于 Sys V 初始化系统:

[root@localhost ~]# chkconfig --level 35 httpd on

对于 systemd 系统:

[root@localhost ~]# systemctl enable httpd

有时你需要增加一个自定义脚本或者命令或者服务在启动时。那需要如何做呢?通过这篇文章,我们将介绍三种方法去实现它。

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

"/etc/rc.local"文件传统上是在切换到多用户运行级别的过程结束时启动所有正常的计算机服务之后执行的。 此方法也适用于systemd 系统,您需要将脚本的位置添加到"/etc/rc.d/rc.local”文件中便于在启动时运行。首先我们得确保这个文件有执行权限。

[root@sharplee sharplee]# chmod +x /etc/rc.d/rc.local

为了详细的了解这一点,我们接下来将创建一个如下所示的简单脚本,但您可以根据需要创建任何脚本:

脚本内容是:

[root@sharplee sharplee]# cat start.sh
#!/bin/bash
date >> /home/sharplee/on-boot-output.txt
hostname >> /home/sharplee/on-boot-output.txt

接下来添加一下刚才创建的start.sh 脚本的执行权限。

最后,我们把刚才创建的可执行脚本文件start.sh 添加到/etc/rc.d/rc.local文件的末尾。

[root@sharplee sharplee]#echo "/home/sharplee/start.sh" >> /etc/rc.d/rc.local

 配置完成之后,重启系统,验证一下是否启动执行脚本了启动之后可以看到以下文件已经创建。

2,使用 crontab 文件

 cron 在特定时间在后端自动执行计划的作业。这可以使用名为"@reboot"的特殊字符串和cron job轻松完成。

@reboot是一个特殊的字符串,允许用户在启动时(启动时)运行任何命令或脚本。

本示例在系统重新启动时运行"/home/sharplee/start.sh"文件。我们将使用在上面的示例中创建的相同脚本。并且删除上面方法中/etc/rc.d/rc.local文件末尾添加的内容。为此,只需在 crontab 文件中添加以下条目:

[root@sharplee sharplee]# crontab -e
@reboot /home/sharplee/start.sh

 配置完之后,重启系统。可以看到重启之后脚本生成的文件中生成内容了。

 

3,使用systemd 单元

此方法仅适用于 systemd 系统,并且非常简单。为此,您需要创建一个 systemd 启动脚本并将其放在"/etc/systemd/system/"目录中。以下时我们的启动单元脚本示例:

[root@sharplee sharplee]# vi start.service

[Unit]
Description=Run a Custom Script at Startup
After=default.target

[Service]
ExecStart=/home/sharplee/start.sh

[Install]
WantedBy=default.target

接下来把创建好的service文件拷贝到/etc/systemd/system/目录中。将service单元脚本放在 systemd 位置后,请运行以下命令以更新 systemd 配置文件并启用该服务:

[root@sharplee sharplee]#systemctl daemon-reload
[root@sharplee sharplee]#systemctl enable start.service

 

接下来重启系统,检验一下是否能够重启生效。

小提示:如果要在后台运行脚本,则需要启动文件中添加尾随 "&"符号。

[root@sharplee sharplee]#echo "/home/sharplee/start.sh &" >> /etc/rc.d/rc.local

如果要以其他用户身份运行命令,请使用以下格式:

[root@sharplee sharplee]#echo "sudo -  $USER -c /home/sharplee/start.sh &" >> /etc/rc.d/rc.local

 $USER指的是Linux系统中的用户,并且该用户需要有执行该脚本的权限,以上后台运行的方法都是在超级管理员权限执行的,实际情况还得配置相应的权限。

 

posted @ 2022-03-16 23:22  Hackerman  阅读(2121)  评论(0编辑  收藏  举报
数码产品