ubuntu-18.04 设置开机启动脚本

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 服务用:

作者:Joncc
链接:https://www.jianshu.com/p/ba6d38ce9c1e
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

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
chmod 755 /etc/rc.local  

编辑rc.local,添加需要开机启动的任务**(这里需要注意,一定要有#!/bin/bash,即指定解释此脚本的解释器shell的路径,否则未指定解释器会执行不成功)**

#!/bin/bash  

echo "test rc " > /var/test.log  

参考:https://www.jianshu.com/p/ba6d38ce9c1e
https://blog.csdn.net/dahuzix/article/details/80785691

你可能感兴趣的:(Linux,Ubuntu问题解决)