文章目录
- 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
二、在/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 中添加自启动程序,可以按照以下步骤进行操作:
- 在 BusyBox 系统中,可以将需要自启动的程序放在
/etc/init.d
目录下。例如,您可以将您需要自启动的程序放在/etc/init.d/myservice
目录下。 - 在
/etc/init.d
目录中创建一个 shell 脚本文件,文件名为您所需要自启动的程序的名称。例如,如果您的自启动程序名称为myservice
,则可以在/etc/init.d
目录中创建一个名为myservice
的 shell 脚本文件。 - 在您创建的 shell 脚本文件中,编写启动自启动程序的命令。例如,如果您的自启动程序是一个 Python 脚本,可以使用以下命令启动它:
#!/bin/sh
python /path/to/myservice.py &
在此示例中,/path/to/myservice.py
是您需要启动的 Python 脚本的路径。使用 &
符号可以在后台运行该脚本。
- 将您创建的 shell 脚本文件设置为可执行文件。例如,如果您的自启动程序名为
myservice
,可以使用以下命令设置其为可执行文件:
chmod +x /etc/init.d/myservice
- 在 BusyBox 的启动脚本中添加对您创建的自启动程序的引用。例如,在
/etc/inittab
文件中添加以下行:
::sysinit:/etc/init.d/myservice
这会在系统启动时自动运行您的自启动程序。
- 保存并重启 BusyBox 系统,您的自启动程序应该会自动运行。您可以使用
ps aux
命令来检查程序是否已经在运行。
3.2 /etc/inittab 介绍
<id>
:任务或服务的唯一标识符,通常由字母、数字和下划线组成。这个字段的值必须是唯一的。<runlevels>
:指定在哪些运行级别下启动任务或服务。运行级别是指系统在不同状态下运行的方式。通常有0-6个运行级别,其中0表示关机状态,1表示单用户模式,2-5表示多用户模式,6表示重新启动。如果您希望在多个运行级别下运行任务或服务,可以使用逗号分隔符或短横线指定范围。<action>
:指定当任务或服务终止时要执行的操作。常用的操作有:respawn(重启任务或服务)、wait(等待任务或服务终止)、once(只运行一次)和off(禁用任务或服务)。<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脚本