目录
- 1、修改/etc/r.local
- 2、/lib/systemd/system增加开机启动服务
- 3、update-rc.d增加开机启动服务
ubuntu作为服务器使用时,常常需要在机器重启时能自动启动我们开发的服务。有时候我们想要脚本开机自动运行,那么就需要设置开机自启动脚本。网上有很多种解决方案,基本上是分为三种:
1、修改/etc/r.local
我在ubuntu18和ubuntu20.10都亲测 /etc/rc.d/rc.local开机启动脚本不生效。主要有以下步骤:
- 查看是否有/etc/rc.d/rc.local
ls -l /etc/rc.d/rc.local
-rw-r--r-- 1 root root 473 Sep 14 02:19 /etc/rc.d/rc.local
#如上信息显示该文件没有执行权限,需要为/etc/rc.d/rc.local添加可执行权限。
# 修改权限
chmod +x /etc/rc.d/rc.local
- 编辑rc.local,添加需要开机启动的任务
#!/bin/sh -e
#
#rc.local
#
#This script is executed at the end of each multiuser runlevel.
#Make sure that the script will "exit 0" on success or any other
#value on error.
#
#In order to enable or disable this script just change the execution
#bits.
#
#By default this script does nothing.
exit 0
注意: 一定要将命令添加在exit 0之前。里面可以直接写命令或者执行Shell脚本文件sh。
但是很容易出现不启动的问题,可以在执行命令中加入测试语句,但是也很容易执行不成功,执行不成功的话,可以参照这篇文章测试CentOS 7中/etc/rc.local开机启动脚本不生效怎么办?.。
2、/lib/systemd/system增加开机启动服务
通常在网上现有的方法,主要是通过修改/etc/init.d,最后修改权限生成。但 Ubuntu 18.04 不再使用initd管理系统,改用systemd,包括用systemctl命令来替换了service和chkconfig的功能。systemd 默认读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。不同于以往的版本,ubuntu18.04默认不带/etc/rc.local文件,我们需要通过配置来让service生效。
- 检查系统目录/lib/systemd/system/test.service,如果没有自己新建,文件内容为(如果文件存在本身是没有[Install]项的,需要自己添加进去)
vim /lib/systemd/system/test.service
- 加入内容信息,要启动的脚本文件或者命令
[Unit]
Description=test
Requires=network-online.target #若需要联网后启动的话,则需要加入该参数
After=network-online.target #若需要联网后启动的话,则需要加入该参数
[Service]
Type=forking
ExecStart=/bin/bash /home/test/test.sh #执行的内容是脚本test.sh中的内容,其中包括它的绝对地址
[Install]
WantedBy=multi-user.target
此处可以自行增加一个service在该路径下,根据该路径下的格式,自行定制即可。详细参数信息可以见下Systemd 添加自定义服务(开机自启动).
- 修改配置文件后需要重加载配置
sudo systemctl daemon-reload
- 创建test.sh
vim /home/test/test.sh
#!/bin/bash
echo `date`,"ok" >>/tmp/test.log
- 赋予可执行权限
chmod +x /home/test/test.sh
- 设置开机启动
systemctl enable test.service
- 查看启动的状态
systemctl status test.service
3、update-rc.d增加开机启动服务
该方法主要是适用于/etc/init.d的服务的情况,现今低版本的linux主要是用它。现阶段不在赘述。