问题描述
在使用较新版本的Ubuntu系统中,之前写入rc.local的开机执行命令不执行了。经探究发现,Ubuntu自18.04版本后改用systemd管理系统,不再用initd管理系统,默认也没有/etc/rc.local文件。
问题分析
1. 先用systemctl status rc-local
查看状态
2. 设置rc-local开机自启,输出如下错误信息:
systemctl enable rc-local
大概意思是rc-local服务文件没有install字段的相关信息,这些相关信息包括WantedBy, RequiredBy, Also, Alias。如果不写则系统不认为它是一个systemd服务。
3. 打开文件/lib/systemd/system/rc-local.service
(如无此文件则新建),做如下配置:
[Unit] Description=/etc/rc.local Compatibility Documentation=man:systemd-rc-local-generator(8) ConditionFileIsExecutable=/etc/rc.local After=network.target [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 RemainAfterExit=yes GuessMainPID=no [Install] WantedBy=multi-user.target # 指的是表示该服务所属 target Alias=rc-local.service
其中Unit字段描述服务的启动顺序&依赖关系,Service字段描述如何启动,Install字段描述如何安装该服务。
4. 打开/etc/rc.local输入如下内容
echo "rc.local was executed on $(date)" >> /var/log/rc.local.log
5. 给文件权限
chmod +x /etc/rc.d/rc.local
6. 重启系统
reboot
7. 查看日志是否有输出.有则搞定
cat /var/log/rc.local.log