ubuntu18.04设置开机自动启动脚本
简介
ubuntu作为服务器使用时,常常需要在机器重启时能自动启动我们开发的服务。
Ubuntu 16.10开始不再使用initd管理系统,改用systemd,包括用systemctl命令来替换了service和chkconfig的功能。
systemd 默认读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。
不同于以往的版本,ubuntu18.04默认不带/etc/rc.local文件,我们需要通过配置来让rc.local.service生效。
然后我们就可以像以前那样,直接把启动脚本写入/etc/rc.local文件,这样机器启动时就会自动运行它。
除了常规的设置启动脚本以外,本文还介绍一下通用的添加自动启动服务的一般方法。
rc.local启动脚本
1.查看所有服务
ls /lib/systemd/system,可以看到很多服务,这样不便于确认指定的服务是否存在
ls /lib/systemd/system | grep rc,找到我们关心的rc-local.service服务
2.修改服务配置
sudo vi /lib/systemd/system/rc-local.service
打开后可以看到,文件包含[Unit]和[Service]两个部分内容
一般启动文件需要三个部分:
[Unit] 启动顺序与依赖关系
[Service] 启动行为, 如何启动,启动类型
[Install] 定义如何安装这个配置文件,即怎样做到开机启动
在文件最后加入以下内容
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
3.创建执行文件
sudo vi /etc/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.
echo "this shows rc.local is start onboot" > /usr/local/rc-local-info.log
# add your scritp here
exit 0
为rc.local加执行权限: sudo chmod +x /etc/rc.local
4.建立软链接
systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接
ln -s src_file det_file
sudo ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/
5.启用服务并启动
sudo systemctl enable rc-local
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
6.重启检查:
cat /usr/local/rc-local-info.log
通用服务创建
请按以下步骤进行:
1.创建一个systemd服务
比如创建名为my-serverA的服务:sudo vi /etc/systemd/system/my-serverA.service
将以下内容写入文件
[Unit]
Description=/etc/my_serverA.sh Compatibility
ConditionPathExists=/etc/my_serverA.sh
[Service]
Type=forking
ExecStart=/etc/my_serverA.sh start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
2.创建可执行文件my_serverA.sh
sudo vi /etc/my_serverA.sh
echo "this shows my_serverA.sh is start onboot" > /usr/local/my_serverA.start.log
# add your scritp here
# my_serverA
exit 0
为my_serverA.sh加执行权限: sudo chmod +x /etc/my_serverA.sh
3.启用my_serverA服务
sudo systemctl enable my_serverA
4.启动服务并打印状态
sudo systemctl start my_serverA.service
sudo systemctl status my_serverA.service
5.重启以验证
cat /usr/local/my_serverA.start.log
两种方法的流程大概相同,这与Linux的服务启动机制有关,只要我们设置好,服务