脚本设置流程及解析过程:
一:脚本设置流程:
ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.local重新发挥作用。
1、建立rc-local.service文件
1
sudo vi /etc/systemd/system/rc-local.service
2、将下列内容复制进rc-local.service文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
3、创建文件rc.local
1
sudo vi /etc/rc.local
4、将下列内容复制进rc.local文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/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 “看到这行字,说明添加自启动脚本成功。” > /usr/local/test.log
exit 0
5、给rc.local加上权限
1
sudo chmod +x /etc/rc.local
6、启用服务
1
sudo systemctl enable rc-local
7、启动服务并检查状态
1
2
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
8、重启并检查test.log文件
1
cat /usr/local/test.log
如果能看到内容,说明设置成功,你就可以通过编辑rc.local文件来设置启动脚本了
二:解析说明:
参阅下列链接
https://askubuntu.com/questions/886620/how-can-i-execute-command-on-startup-rc-local-alternative-on-ubuntu-16-10
关于 ubuntu-18.04 LTS 版本是在 ubuntu 的官方论坛看到原来 ubuntu-16.10 开始不再使用initd管理系统,改用systemd…
systemd is now used for user sessions. System sessions had already been provided by systemd in previous Ubuntu releases.
快速看了 systemd 的使用方法,发现改动有点大, 包括用 systemctl 命令来替换了 service 和 chkconfig 的功能。
比如以前启动 mysql 服务用:
sudo service mysql start
现在用:
sudo systemctl start mysqld.service
其实这个改动到不是算大,主要是开机启动比以前复杂多了。systemd 默认读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。
执行 ls /lib/systemd/system 你可以看到有很多启动脚本,其中就有我们需要的 rc.local.service
打开脚本内容:
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] 段: 定义如何安装这个配置文件,即怎样做到开机启动
可以看出,/etc/rc.local 的启动顺序是在网络后面,但是显然它少了 Install 段,也就没有定义如何做到开机启动,所以显然这样配置是无效的。 因此我们就需要在后面帮他加上 [Install] 段:
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
这里需要注意一下,ubuntu-18.04 默认是没有 /etc/rc.local 这个文件的,需要自己创建
sudo touch /etc/rc.local
然后把你需要启动脚本写入 /etc/rc.local ,我们不妨写一些测试的脚本放在里面,以便验证脚本是否生效.
echo “this just a test” > /usr/local/text.log
做完这一步,还需要最后一步 前面我们说 systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接
ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/
OK, 接下来,重启系统,然后看看 /usr/local/text.log 文件是否存在就知道开机脚本是否生效了。
备注:文章转自他人,仅供学习交流使用。
1万+

被折叠的 条评论
为什么被折叠?



