从Ubuntu18.04 开始,系统不再使用initd管理系统,而是改用systemd。虽然systemd设计更加合理和友好,在红帽系上也有使用,但改变还是太大,跟之前的完全不同。而且Ubuntu 18.04中连/etc/rc.local文件也没有了,这让自己写的脚本开机自动启动的设置变的麻烦,也不想为了一个脚本去写systemd配置文件。
为了像以前一样,在/etc/rc.local中设置开机启动程序,需要以下几步:
1、原理
systemd 默认会读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接 /lib/systemd/system/ 下的文件。一般系统安装完 /lib/systemd/system/ 下会有 rc-local.service 文件,即我们需要的配置文件。
target 用于指定什么时候启动,例如查看target:ll /lib/systemd/system|grep target
1.1、将 /lib/systemd/system/rc-local.service 链接到 /etc/systemd/system/ 目录。
ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
1.2、查看文件内容
cat /etc/systemd/system/rc-local.service
说明:
[Unit] 区块:启动顺序与依赖关系。
ConditionFileIsExecutable=/etc/rc.local
After=network.target
ConditionFileIsExecutable指定了执行的文件,
After 表示在 network.target 这个target后面进行执行。也就是网络启动完成之后,执行 /etc/rc.local 文件。
[Service] 区块:启动行为,如何启动,启动类型。
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
1.3、定义如何安装这个配置文件,即怎样做到开机启动。
Install 区块:
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
这个是我们自己编辑新增的。
知道原理和配置好后,接下来就比较简单了。
2、创建/etc/rc.local
touch /etc/rc.local
3、设置可执行权限
chmod 755 /etc/rc.local
4、编辑rc.local,添加需要开机启动的任务
例如:
#!/bin/bash echo `date` >>/tmp/rt.log 2>&1
5、reboot重启系统,查看是否生效
6、总结
其实就是利用 systemd 的启动原理, 通过 /etc/systemd/system/rc-local.service 文件来达到启动时执行 /etc/rc.local 文件的目的。不仅仅是ubuntu 18.04有这个问题,debian 9也会碰到,方法使用。没有/etc/rc.local文件,熟悉的开机自动启动的设置就配置好了。
参考链接:https://www.centos.bz/2018/05/ubuntu-18-04-rc-local-systemd%E8%AE%BE%E7%BD%AE/
复杂的一皮。
有点深奥,看不懂的样子,先收藏起来到 http://www.tgz.com 糖果站,慢慢研究。