Ubuntu1804 开机自启动脚本编辑方案-亲身实践
一、引言
- 前端时间由于软件功能需求,需要编写的程序开机自启,之前在其他Linux(
Buildroot
)系统中编写的时候只需要在/etc/init.d/rcS
下面加入自己的程序就行了,但是Ubuntu1804
好像不可以,网上找了好多各种各样的,自己实践了一下,找到一个可行的方法。. Ubuntu 16.10
开始用systemctl
命令替换了service
和chkconfig
的功能。systemd
默认读取/etc/systemd/system
下的配置文件,该目录下的文件会链接/lib/systemd/system/
下的文件。- 不同于以往的版本,
ubuntu18.04
默认不带/etc/rc.local
文件,我们需要通过配置来让rc.local.service
生效。然后我们就可以像以前那样,直接把启动脚本写入/etc/rc.local
文件,这样机器启动时就会自动运行它。除了常规的设置启动脚本以外,本文还介绍一下通用的添加自动启动服务的一般方法。
二、方法一(已实践)
废话少说,直接进入方法一
2.1 rc.local脚本
2.1.1 查看已有服务
ls /lib/systemd/system
ls /lib/systemd/system | grep "想要查看的服务"
2.1.2 修改rc.local.service
服务配置
sudo vi /lib/systemd/system/rc.local.service
以下是我的/lib/systemd/system/rc.local.service
内容(注:这里是ubnutu1604
的,拿出来示范一下,实践的版本是Ubuntu1804
,不过应该一样)
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
其中:
[Unit]
启动顺序与依赖关系;[Service]
启动行为, 如何启动,启动类型 ;[Install]
定义如何安装这个配置文件,即怎样做到开机启动
在文件最后添加[Install]
内容
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
2.1.3 创建执行文件
我们需要编辑 /etc/rc.local
文件添加自己的脚本
cat /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.
可以在/etc/rc.local
中直接添加需要执行的命令,也可以执行自己需要运行的脚本,这里新建run.sh
进行测试
run.sh
内容为
#!/bin/sh
echo "this is test sh" > ./test.log
在/etc/rc.local
末尾添加,并为rc.local
加执行权限: sudo chmod +x /etc/rc.local
/home/xzm/run.sh
2.1.4 建立软连接
systemd
默认读取 /etc/systemd/system
下的配置文件, 所以还需要在 /etc/systemd/system
目录下创建软链接,不懂ln命令可以去搜索一下,大概意思是ln -s 源文件 目标文件
最好使用全文件路径,否则会链接断开
sudo ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/
2.1.5 启用服务并启动
1. sudo systemctl enable rc-local
2. sudo systemctl start rc-local.service
3. sudo systemctl status rc-local.service
2.1.6 重启检查即可
2.2 通用服务创建(未测试)
感谢参考文章的整理,可以前往原文查看。
2.2.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.2.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`
- 启用
my_serverA
服务
sudo systemctl enable my_serverA`
- 启动服务并打印状态
sudo systemctl start my_serverA.service
sudo systemctl status my_serverA.service