linux系统设置开机启动的两种方法systemd及rc.local(手工写sh脚本,手工写service服务)

知识点

在Linux系统中,有多种方法可以设置开机启动。以下是其中的一些主要方法:

systemd

  • 在较新的Linux发行版中,systemd是默认的初始化和服务管理工具。
  • 可以在/etc/systemd/system/目录中创建一个新的单元文件,用于定义自启动的服务。
  • 单元文件通常包含服务的描述、依赖关系、要执行的命令等。

rc.local

  • 打开/etc/rc.d/rc.local文件,在文件的末尾添加要执行的命令或脚本的全路径。
  • 确保为rc.local文件添加执行权限,可以使用chmod +x /etc/rc.d/rc.local

crontab

  • 编辑crontab文件,并添加一行如@reboot your_command的命令,其中your_command是要在启动时执行的命令。

/etc/init.d/

  • 在/etc/init.d/目录下创建一个新的启动脚本,并为其添加执行权限。
  • 使用update-rc.d命令(在Debian/Ubuntu系统中)或chkconfig命令(在CentOS/RedHat系统中)将脚本链接到适当的运行级别。

实验

这是主要实验前两种方式

一、systemd

(一)自写一个sh脚本并加入开机启动
vim /usr/local/WF/rebootechotime.sh

脚本内容如下:

#!/usr/bin/sh
#/usr/local/WF/rebootechotime.sh
echo "reboot time is:" >> /usr/local/WF/rebootechotime.txt
date >> /usr/local/WF/rebootechotime.txt

脚本每次开机启动一次,并将开机时间记录在rebootechotime.txt文件中
在这里插入图片描述

cd /usr/local/WF
ll

在这里插入图片描述
可以看到当前脚本没有可执行的权限

chmod a+x rebootechotime.sh

在这里插入图片描述
现在有执行权限了,执行一下:

./rebootechotime.sh
cat rebootechotime.txt

在这里插入图片描述
致此,当前脚本可以独立运行了。

接下来,写servie

vim /etc/systemd/system/rebootechotime.service
[Unit]
Description=rebootechotime
After=network.target

[Service]
User=root
ExecStart=/usr/local/WF/rebootechotime.sh

[Install]
WantedBy=multi-user.target

测试一下服务是否可以正常启动

cat /usr/local/WF/rebootechotime.txt
systemctl daemon-reload
systemctl start rebootechotime
cat /usr/local/WF/rebootechotime.txt

在这里插入图片描述

设置开机启动

systemctl enable rebootechotime

查看服务启动日志

journalctl -u rebootechotime
(二)源码安装的nginx加入开机启动

这里以nginx为例,因为笔者的nginx是源码安装的,使用systemctl是无法管理的

1.前提:

当前启动nginx的方法使用绝对路径和相对路径两种方式:

/usr/local/nginx/sbin/nginx

cd /usr/local/nignx/sbin && ./nginx

2.添加systemd服务

vim /etc/systemd/system/nginx.service

文件内容如下:

[Unit]
Description=nginx service
After=network.target

[Service]
User=root
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecStartPre=/bin/sleep 10

[Install]
WantedBy=multi-user.target

在这里插入图片描述
解析

  • User=root:这表示服务将以 root 用户的身份运行。虽然 nginx 通常可以作为一个非 root 用户运行,但在这个配置中,它被设置为以 root 用户身份运行。出于安全考虑,通常建议避免以 root 用户身份运行服务,除非有特定的理由。

  • Type=forking:这指定了服务类型。forking 类型表示服务在启动时会立即返回,而实际的进程将在后台运行。systemd 会等待进程退出,并假定子进程是服务的实际主进程。这是传统 Unix 守护进程的标准行为。

  • ExecStart=/usr/local/nginx/sbin/nginx:这定义了服务启动时应该运行的命令。在这个例子中,它指定了 nginx 的主可执行文件的路径。

  • ExecReload=/usr/local/nginx/sbin/nginx -s reload:当服务需要重新加载配置时(例如,当 systemctl reload nginx 被调用时),这个命令将被执行。在这个例子中,它发送了一个 reload 信号给 nginx 主进程,以重新加载配置。

  • ExecStop=/usr/local/nginx/sbin/nginx -s stop:当服务需要停止时(例如,当 systemctl stop nginx 被调用时),这个命令将被执行。在这个例子中,它发送了一个 stop 信号给 nginx 主进程,以优雅地停止服务。

  • ExecStartPre=/bin/sleep 10:这是一个比较少见的指令,它定义了在 ExecStart 之前的命令。在这个例子中,服务启动前会等待 10 秒。这通常不是一个好的做法,因为它会延迟服务的启动时间,除非有特定的理由(例如,等待其他服务启动或某个资源变得可用)。

3.加入开机启动

systemctl enable nginx  

rc.local

首先将前面写的开机启动取消掉

systemctl disable rebootechotime
vim /etc/rc.d/rc.local

在最后面加入

nohup /usr/local/WF/rebootechotime.sh &
exit 0

/usr/local/WF/rebootechotime.sh

在这里插入图片描述

解析:

  • 在 /etc/rc.local 文件中,你可以使用 nohup命令和 &符号将脚本放到后台执行。nohup命令用于运行一个命令,使其在你退出 shell 后继续运行。&符号则用于将命令放到后台执行。
  • 在Linux的shell脚本和初始化文件中,exit 0通常用来表示脚本或程序已成功完成。exit 命令用于结束脚本的执行,并返回一个退出状态码给父进程。退出状态码是一个整数,通常用于向调用者指示脚本的执行结果。exit 0:表示成功(没有错误)exit 1、exit 2 等非零值:表示有错误发生,不同的非零值可能表示不同类型的错误。

现在添加执行权限并重启测试一下:

chmod a+x /usr/local/WF/rebootechotime.sh
reboot

重启完后,查看一下rebootechotime.txt

cat /usr/local/WF/rebootechotime.txt

在这里插入图片描述
多了一条记录

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值