答案1
介绍
我认为您不应该按照 George 的链接建议创建新服务。rc-local.service
systemd 中已经存在,并且服务文件建议rc.local
,如果存在且可执行,自动被拉入multi-user.target
。因此,无需重新创建或强制执行 以另一种方式完成的事情systemd-rc-local-generator
。
一个解决方案
一个快速的解决方案(我不知道这是否是规范的方法):
在终端中执行:
printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
sudo reboot
此后,rc.local
系统启动时将调用。输入您喜欢的内容。
背景
如果你在终端中执行:
sudo systemctl edit --full rc-local
您可以看到头部注释包含如下行:
# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
这表明,在这个系统中,如果有一个/etc/rc.local
可执行文件,那么它将被自动拉入 multi-user.target。因此,您只需创建相应的文件 ( sudo touch...
) 并使其可执行 ( sudo chmod +x ...
)。
答案2
我看到建议的这个解决方案涉及使用systemd
这里:
创建服务:
sudo vi /etc/systemd/system/rc-local.service
在那里添加您的代码:
[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
创建并确保
/etc/rc.local
是可执行的,然后在其中添加以下代码:sudo chmod +x /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. exit 0
启用服务:
sudo systemctl enable rc-local
启动服务并检查状态:
sudo systemctl start rc-local.service sudo systemctl status rc-local.service
如果一切顺利,您可以将您的添加
code
到/etc/rc.local
文件中,然后重新启动它。
笔记:在 Lubuntu 16.10 上测试。
来源:
https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd
答案3
添加到Jan 的回答与通常的rc.local
文件不同,它rc-local service
不是在所有服务启动后执行,而是在网络上线后执行。
在某些情况下,你可能希望rc.local
稍后运行命令。例如,我希望它在启动后执行lxd
。
在这种情况下,您可以rc-local service
通过创建一个嵌入式 conf 文件来编辑启动依赖项:
/etc/systemd/system/rc-local.service.d/override.conf
其内容为:
[Unit]
After=network.target lxd.service
您可以在其中添加所需的单位名称(就像我添加的一样lxd.service
)
systemctl daemon-reload
之后别忘记。