文章目录

  • ubuntu 18.04
  • 一、在/etc/rc.local文件中添加自启动命令
  • 二、在/etc/init.d目录下添加自启动脚本 + update-rc.d 添加自动执行动作
  • 三、在/etc/init.d目录下添加自启动脚本 + /etc/inittab 添加自动执行动作(busybox)
  • 3.2 /etc/inittab 介绍
  • 四、制作Linux服务并设置开机自启动
  • 四、参考资料


ubuntu 18.04

  • [Linux]Ubuntu18.04如何增加开机启动服务

一、背景说明

  • Ubuntu 18.04不再使用initd管理系统,改用systemd,包括用systemctl命令来替换了service和chkconfig的功能。
  • systemd 默认读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。
  • 不同于以往的版本,ubuntu18.04默认不带/etc/rc.local文件,我们需要通过配置来让rc.local.service生效。
vim /etc/rc.local
chmod +x /etc/rc.local

systemctl is-enabled rc-local
systemctl enable rc-local
systemctl start rc-local.service
systemctl status rc-local.service

一、在/etc/rc.local文件中添加自启动命令

  • ubuntu20.04 不存在/etc/rc.local文件

注意:如果存在直接添加内容,如果不存在看是否使用的是下面方式。

示例

cat /usr/lib/systemd/system/rc-local.service
#也可能在下面这个路径下
cat /etc/systemd/system/rc-local.service

linux怎么设置tcp_timestamps_nginx

二、在/etc/init.d目录下添加自启动脚本 + update-rc.d 添加自动执行动作

  • linux系统/etc/init.d目录下的开机自启脚本

1.复制或软连接脚本到/etc/init.d/目录下

2.脚本内容如下,加粗内容是模板性注释,不能更改。

cat /etc/init.d/mayue.sh

脚本内容如下

#!/bin/sh                                          
                                                               
echo "mayue.sh 8888" >> /app/mayue.txt

case "$1" in
    start)
        echo "mayue.sh start" >> /app/mayue.txt
        ;;

    stop)
        echo "mayue.sh stop" >> /app/mayue.txt
        ;;
    *)
        echo "Usage: /etc/init.d/mayue.sh {start|stop}"
        exit 1
        ;;
esac

exit 0

3.赋权限给脚本文件

sudo chmod 755 /etc/init.d/mayue.sh

4.加入开机启动

#在ubuntu环境认可的命令、成功后自动添加到对应的rc.d文件夹中
sudo update-rc.d /etc/init.d/mayue.sh defaults 90   #若报错用下面命令
#或
cd /etc/init.d;update-rc.d mayue.sh defaults 90 

#在centos环境认可的命令
sudo chkconfig --add mayue.sh  && chkconfig mayue.sh on

5.重启验证,查看输出内容:

root@imx6qdlsabresd:~# cat /app/mayue.txt 
mayue.sh 8888
mayue.sh stop
mayue.sh 8888
mayue.sh start

由于调用reboot命令先停止再启动,所以打印内容如上。

三、在/etc/init.d目录下添加自启动脚本 + /etc/inittab 添加自动执行动作(busybox)

要在 busybox init 中添加自启动程序,可以按照以下步骤进行操作:

  1. 在 BusyBox 系统中,可以将需要自启动的程序放在 /etc/init.d 目录下。例如,您可以将您需要自启动的程序放在 /etc/init.d/myservice 目录下。
  2. /etc/init.d 目录中创建一个 shell 脚本文件,文件名为您所需要自启动的程序的名称。例如,如果您的自启动程序名称为 myservice,则可以在 /etc/init.d 目录中创建一个名为 myservice 的 shell 脚本文件。
  3. 在您创建的 shell 脚本文件中,编写启动自启动程序的命令。例如,如果您的自启动程序是一个 Python 脚本,可以使用以下命令启动它:
#!/bin/sh
python /path/to/myservice.py &

在此示例中,/path/to/myservice.py 是您需要启动的 Python 脚本的路径。使用 & 符号可以在后台运行该脚本。

  1. 将您创建的 shell 脚本文件设置为可执行文件。例如,如果您的自启动程序名为 myservice,可以使用以下命令设置其为可执行文件:
chmod +x /etc/init.d/myservice
  1. 在 BusyBox 的启动脚本中添加对您创建的自启动程序的引用。例如,在 /etc/inittab 文件中添加以下行:
::sysinit:/etc/init.d/myservice

这会在系统启动时自动运行您的自启动程序。

  1. 保存并重启 BusyBox 系统,您的自启动程序应该会自动运行。您可以使用 ps aux 命令来检查程序是否已经在运行。

3.2 /etc/inittab 介绍

  1. <id>:任务或服务的唯一标识符,通常由字母、数字和下划线组成。这个字段的值必须是唯一的。
  2. <runlevels>:指定在哪些运行级别下启动任务或服务。运行级别是指系统在不同状态下运行的方式。通常有0-6个运行级别,其中0表示关机状态,1表示单用户模式,2-5表示多用户模式,6表示重新启动。如果您希望在多个运行级别下运行任务或服务,可以使用逗号分隔符或短横线指定范围。
  3. <action>:指定当任务或服务终止时要执行的操作。常用的操作有:respawn(重启任务或服务)、wait(等待任务或服务终止)、once(只运行一次)和off(禁用任务或服务)。
  4. <process>:要运行的进程或命令。这个字段通常是一个绝对路径,指定要启动的可执行文件或脚本。

这是一个示例行:

my_script:2345:respawn:/path/to/my_script.sh

action 取值范围如下

  • respawn:如果进程退出,重新启动它。
  • once:仅在 init 启动时启动一次进程,进程退出后不会重新启动。
  • wait:等待进程退出,然后执行下一个操作。
  • boot:在启动时执行进程,但不等待其退出。
  • bootwait:在启动时执行进程,并等待其退出。
  • sysinit:类似于 boot,但在启动其他服务之前执行。
  • shutdown:在系统关闭时执行进程。

这些 action 可以根据需要进行组合,以满足不同的需求。

四、制作Linux服务并设置开机自启动

以nginx为例,通过制作linux服务的方式启动,并设置开机启动

1)前提条件:nginx已安装,默认安装路径为:/usr/local/nginx

2)在/etc/systemd/system/路径下创建nginx.service文件,写入如下内容

[Unit]

Description=nginx - high performance web server

After=nginx.service

[Service]

Type=forking

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s stop

Execenable=/usr/local/nginx/sbin/nginx

[Install]

WantedBy=multi-user.target

3)设置开机自启动

# 设置开机启动
systemctl enable nginx

# 取消开机自启动
#systemctl disable nginx

# 查看服务当前状态
systemctl status nginx

# 启动nginx服务
systemctl start nginx

# 停止nginx服务
systemctl stop nginx

# 重启nginx服务
systemctl restart nginx

四、参考资料

  • 理解Linux系统/etc/init.d目录和/etc/rc.local脚本