Ubuntu1804 开机自启动脚本编辑方案-亲身实践

Ubuntu1804 开机自启动脚本编辑方案-亲身实践

  • 一、引言
  • 二、方法一(已实践)
    • 2.1 rc.local脚本
      • 2.1.1 查看已有服务
      • 2.1.2 修改`rc.local.service`服务配置
      • 2.1.3 创建执行文件
      • 2.1.4 建立软连接
      • 2.1.5 启用服务并启动
      • 2.1.6 重启检查即可
    • 2.2 通用服务创建(未测试)
      • 2.2.1 创建`systemd`服务
      • 2.2.2 创建可执行文件`my_serverA.sh`

一、引言

  • 前端时间由于软件功能需求,需要编写的程序开机自启,之前在其他Linux(Buildroot)系统中编写的时候只需要在/etc/init.d/rcS下面加入自己的程序就行了,但是Ubuntu1804好像不可以,网上找了好多各种各样的,自己实践了一下,找到一个可行的方法。.
  • Ubuntu 16.10开始用systemctl命令替换了servicechkconfig的功能。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

其中:

  1. [Unit] 启动顺序与依赖关系;
  2. [Service] 启动行为, 如何启动,启动类型 ;
  3. [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

你可能感兴趣的:(Linux开发调试记录,linux,ubuntu,运维)